在前面的章节中,你已经学到 Camel 将所有的异常认为是可恢复的错误,并使用setException(Throwable cause)方法将他们存储在 Exchange 中。这意味着 Camel 错误处理机制只会对设置到 Exchange 上的异常做出反应。默认情况下,如果一个不可恢复的错误设置为一个错误消息,此时 Camel 的错误处理机制不会做出反应。也就是说在exchange.getException() != null时,Camel 的错误处理机制才会触发。

阅读全文 »

理解错误处理

在走进 Camel 错误处理的世界之前,我们需要退一步,看看更普遍的错误。首先,错误一般分为两大类:可恢复的错误和不可恢复的错误。其次我们需要看看何时何地开始错误处理,因为错误的发生是有先决条件的。

可恢复的错误和不可恢复的错误

当涉及到的错误,我们可以将他们分为可恢复的错误和不可恢复的错误,如图所示。

阅读全文 »

概念

以文法文件作为 DSL,驱动语法分析器的构建。语法分析器生成器可以根据文法文件生成语法分析器。要更新语法分析器,只要更新文法并重新生成。

顾名思义,有一些成熟的语法分析器生成器可以帮助我们生成语法分析器代码,我们需要做的工作就是定义文法文件。

下面以 ANTLR 文法为例,只做概念了解即可

阅读全文 »

定义

通过定义一个文法并使用该文法让翻译过程结构化的方式来翻译源文本。

语法制导翻译使用文法定义如何创建语法分析器,语法分析器可以将输入的文本转换成语法分析树,语法分析树具有类似于文法规则的结构。

阅读全文 »

Route 和 Endpoint 处理规则

  • Route 和 Consumer:当使用 RouteBuilder 的 from 方法构建 endpoint 时,其调用 endpoint 的 createConsumer 创建一个 Consumer 对象,处理 from 接收的 Exchange
  • Route 和 Producer:当使用 to 方法指向下一个 endpoint 时,该指向的 endpoint 会调用 createProducer 创建一个 Producer,由 Producer 消费该消息,同时发送的端点由 consumer 转变为 Producer

示例说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Test
public void testDirect1() throws Exception {
CamelContext context=new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:step1").to("oss:home?bucket=curryzxh");
}
});
context.start();
ProducerTemplate producerTemplate=context.createProducerTemplate();
producerTemplate.sendBodyAndHeader("direct:step1",
"hello","fileName","testName");
Thread.sleep(2000);
}

流程说明

概念

之前有介绍过有 2 种方式可以对 Endpoint 进行属性配置,分别是传入 map 和 url 参数,如下

1
2
3
4
5
6
7
TimerComponent component= (TimerComponent)context.getComponent("timer");
//使用map传入
Map<String, Object> properties=new HashMap<>();
properties.put("period","5s");
Endpoint endpoint=component.createEndpoint("timer:foo",properties);
//使用url参数传入
Endpoint endpoint=component.createEndpoint("timer:foo?period=5s");

除上面方式之外,还可以通过 PropertyConfigurer 对 Component 和 Endpoint 进行属性通用设置

阅读全文 »
0%