Edw*_*ard 6 apache-camel rabbitmq dead-letter
我正在尝试在我的消息中添加自定义标头,因此每当发生异常并最终进入死信队列时,我都可以看到异常是什么。然而,我在这方面的所有尝试都失败了。
不允许将异常设置为负载中的属性。
@Component
public class ProcessRoute extends RouteBuilder {
...
@Override
public void configure() throws Exception {
onException(Exception.class)
.log("Error for ${body}! Requeue")
.redeliveryDelay(2000)
.maximumRedeliveries(3)
.handled(true)
.setHeader("TEST", constant("TEST"))
.process(e -> {
e.getOut().setHeader("TEST", "TEST");
e.setProperty("TEST","TEST");
});
from(SOME_ROUTE)
.doSomeStuff()
.to(RABBITMQ);
}
...
}
Run Code Online (Sandbox Code Playgroud)
RABBITMQ-字符串:
rabbitmq://foo
?exchangeType=topic
&addresses=localhost:1234
&routingKey=#
&autoDelete=false
&queue=bar
&autoAck=false
&deadLetterExchange=DLX
&deadLetterQueue=bar.dlq
&deadLetterExchangeType=direct
&deadLetterRoutingKey=#
&username=foo
&password=bar
Run Code Online (Sandbox Code Playgroud)
死信队列上的结果消息:

如果您使用遵循 Camel RabbitMQ 组件已建立的模式的标头键,那么当消息发布到 RabbitMQ 时,您的自定义标头将被选取。
从上面的代码中获取,而不是:
.setHeader("TEST", constant("TEST"))
Run Code Online (Sandbox Code Playgroud)
做这个:
.setHeader("rabbitmq.TEST", constant("TEST"))
Run Code Online (Sandbox Code Playgroud)
Camel RabbitMQ 组件似乎忽略了 Camel 交换上可能存在的所有其他非“rabbitmq.*”标头,这可能是有充分理由的。可能有很多,其中大多数在发布到 RabbitMQ 的消息上下文中没有意义。
| 归档时间: |
|
| 查看次数: |
1967 次 |
| 最近记录: |