【问题标题】:Set ActiveMQ message header while using Camel's @Produce annotation在使用 Camel 的 @Produce 注释时设置 ActiveMQ 消息头
【发布时间】:2013-01-07 10:33:09
【问题描述】:

我们使用 Camel 通过 ActiveMQ 发送消息。在我们的代码中,我们有以下配置,它可以工作:

@Produce(uri = IEventService.QUEUE_NAME)
private IProducer sender;

@Override
public void emit(final Event e) {
    sender.emit(e);
}

现在,我们要使用 ActiveMQ 消息组: http://activemq.apache.org/message-groups.html

根据文档,我需要在消息头中设置 JMSXGroupID。如何获取消息头以便我可以在我的 emit() api 中设置此属性?

谢谢。 -AP_

【问题讨论】:

    标签: header activemq apache-camel


    【解决方案1】:

    除了将 @Produce 注释到 IProducer(您自己定义的,对吗?)之外,您可以这样做

    @EndpointInject(uri = IEventService.QUEUE_NAME)
    private ProducerTemplate sender;
    
    @Override
    public void emit(final Event e){
       sender.sendBodyAndHeader(e,"JMSXGroupID",someId);
    }
    

    不确定这是否可以,或者您是否将 IProducer 用于其他用途。

    【讨论】:

    • 是的,使用 ProducerTemplate 也允许发送标头。我们可以考虑使用代理的东西,例如接口上的@Produce,将第二个参数作为标题。如果你传入一个地图,那么它就是一个标题地图。
    • 我记录了一张票以得到改进:issues.apache.org/jira/browse/CAMEL-6007
    【解决方案2】:

    另一种解决方案是发送到 direct:myname 端点。然后你有一条小路线 from("direct:myname").to(IEventService.QUEUE_NAME)

    所以在这条路线中你可以很容易地添加标题。

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 2014-06-27
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2016-02-02
      • 1970-01-01
      相关资源
      最近更新 更多