Camel 未发布到 RabbitMQ queue

Camel not publishing to RabbitMQ queue

我在 Camel 的 routeContext 中定义了一个简单的路由(该路由将在多个路由中使用)。

    <route id="sendToRabbitQueue">
        <from uri="direct:sendToQueue" />
        <convertBodyTo type="java.lang.String"/>
        <setHeader headerName="rabbitmq.ROUTING_KEY">
            <constant>my.routing.key</constant>
        </setHeader>
        <to uri="ref:genericRabbitEndpoint"/>
    </route>

我有一个端点(在端点文件中定义)

    <endpoint id="genericRabbitEndpoint" uri="rabbitmq://${rabbitmq.host}:${rabbitmq.port}/${rabbitmq.exchange.name}">
        <camel:property key="autoDelete" value="false" />
        <camel:property key="connectionFactory" value="#rabbitConnectionFactory" />
    </endpoint>

是的 - 我看过 http://camel.apache.org/rabbitmq.html 页面 - 那是我想到在交易所设置 header 的地方。但是 queue 上没有发布消息。我显然忽略了一些东西,我们将不胜感激。

所以这似乎有点陷阱,答案与我没有包含在问题中的部分路线有关,因为我认为它不相关。

路由从 RabbitMQ 端点(上面未包含)开始。结果,交易所在到达时设置了一些 RabbitMQ headers:

  • rabbitmq.ROUTING_KEY
  • rabbitmq.EXCHANGE_NAME
  • rabbitmq.DELIVERY_TAG

这些 headers 在路由的整个生命周期中使用,并且当我尝试在不同的 RabbitMQ 端点发布时似乎覆盖了这些值。我修复的方法是引入一个剥离 headers 的 bean。我认为这不是理想的行为...

public void stripRabbitHeaders(@Headers Map headers)
{
    headers.remove("rabbitmq.ROUTING_KEY");
    headers.remove("rabbitmq.DELIVERY_TAG");
    headers.remove("rabbitmq.EXCHANGE_NAME");
}