[英]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页面 - 这就是我在交易所设置标题的想法。 然而,没有消息被发布到队列中。 我显然忽略了一些东西,任何帮助将不胜感激。
所以这似乎有点问题,答案与我没有包含在问题中的路线的一部分有关,因为我认为它不相关。
该路由从 RabbitMQ 端点(不包括在上面)开始。 因此,交换在到达时设置了一些 RabbitMQ 标头:
rabbitmq.ROUTING_KEY
rabbitmq.EXCHANGE_NAME
rabbitmq.DELIVERY_TAG
这些标头在路由的整个生命周期中使用,并且当我尝试在不同的 RabbitMQ 端点上发布时似乎会覆盖这些值。 我修复的方法是引入一个可去除标题的 bean。 在我看来不是理想的行为......
public void stripRabbitHeaders(@Headers Map headers)
{
headers.remove("rabbitmq.ROUTING_KEY");
headers.remove("rabbitmq.DELIVERY_TAG");
headers.remove("rabbitmq.EXCHANGE_NAME");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.