簡體   English   中英

駱駝不發布到 RabbitMQ 隊列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM