首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Apache在RabbitMQ消息上设置自定义标头?

如何使用Apache在RabbitMQ消息上设置自定义标头?
EN

Stack Overflow用户
提问于 2019-02-08 15:22:01
回答 1查看 3.3K关注 0票数 6

我正试图在我的消息中添加自定义标题,所以每当出现异常并在死信队列中结束时,我就可以看到异常是什么。然而,我所有的尝试都失败了。

  • 使用.setHeader()
  • 在outMessage上设置头
  • 设置交易所的属性

不允许将异常设置为有效负载中的属性。

代码语言:javascript
复制
@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);
    }
    ...
}

RABBITMQ-string:

代码语言:javascript
复制
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

导致死信队列上的消息:

EN

回答 1

Stack Overflow用户

发布于 2019-05-16 20:12:48

如果按照Camel RabbitMQ组件已经建立的模式使用标头键,那么当消息发布到RabbitMQ时,您的自定义标头将被选中。

从上面的代码中提取,而不是:

代码语言:javascript
复制
.setHeader("TEST", constant("TEST"))

这样做:

代码语言:javascript
复制
.setHeader("rabbitmq.TEST", constant("TEST"))

Camel RabbitMQ组件似乎忽略了骆驼交换中可能存在的所有其他非"rabbitmq.*“标题,这可能是有充分理由的。在发布给RabbitMQ的消息的上下文中,可能有相当多的信息是没有意义的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54595488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档