【问题标题】:Apache Camel + RabbitMQ. Endpoint not creating阿帕奇骆驼+ RabbitMQ。端点未创建
【发布时间】:2014-03-17 07:46:15
【问题描述】:

我创建了一个项目,它只包含 rabbitmq 的路由设置。

<route>
    <from uri="rabbitmq:localhost/test_out_ex?queue=test_out&amp;autoDelete=false&amp;username=admin&amp;password=admin"/>
    <to uri="rabbitmq:localhost/test_in_ex?queue=test_in&amp;autoDelete=false&amp;username=admin&amp;password=admin"/>
</route>

我在 tomcat 上运行它,Camel 只创建“from”-endpoint,而不是“to”(我在 rabbitMq Web 界面中查看)。为什么?因为,“to”没有消费者?

更多细节:

问题是消息没有保存在输出消息队列中。正常情况,应用已经发送消息到队列,此时消费者还没有上线,所以应该保存消息,直到消费者连接。

所以,我定义了简单的路由并将其部署在 tomcat 上,我还部署了 Jolokia 项目以通过 Hawtio 监控我的骆驼上下文。 Hawtio 向我展示了该路线已创建并由两个端点组成。然后我通过 RabbitMq 网络界面将消息发布到“test_out”。 Hawtio 告诉我,它到达了 'test_in' 队列,但在 RabbitMq 网络界面(或 rabbitmqctl)中,'test_in' 队列不存在,所以在服务器重新启动后消息消失了。

【问题讨论】:

  • 花更多时间研究这个,然后只有在您有更多详细信息时才在此处发布!

标签: java rabbitmq apache-camel


【解决方案1】:

我们需要过滤从 test_out 路由到 test_in 时可能导致一些麻烦的消息头。

<route>
    <from uri="rabbitmq:localhost/test_out_ex?queue=test_out&amp;autoDelete=false&amp;username=admin&amp;password=admin"/>
    <removeHeader pattern="rabbitmq.*"/>
    <to uri="rabbitmq:localhost/test_in_ex?queue=test_in&amp;autoDelete=false&amp;username=admin&amp;password=admin"/>
</route>

【讨论】:

  • 您能解释一下为什么我们需要删除标题吗?
  • 因为camel支持从消息头覆盖队列等一些设置,所以我们需要使用remove来避免将消息发送回test_in。如果您不想以这种方式删除标头,则可以从 camel-2.12.3 开始将选项 bridgeEndpoint 设置为 true。它只是告诉骆驼忽略消息头中的设置。
  • 这应该被标记为解决方案。我花了大半天的时间试图解决这个问题!结果是入站消息的标头指定了一个 EXCHANGE_NAME,然后我认为它会覆盖出站消息 URN 中指定的交换。
猜你喜欢
  • 1970-01-01
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2013-02-09
  • 2018-11-27
相关资源
最近更新 更多