0

我将 Mule ESB 与两个应用程序一起使用(一个通过 rabbitMQ 向另一个发布状态)。仅在我的生产环境中,我会弹出这些 amqp.gen- 队列,但它们已被锁定,我看不到其中的内容。他们绑定到我的交易所(出版商)。

客户指出这是随机资产丢失的问题。我试图消除它们的发生,但没有任何线索。根据 rabbitMQ 教程,这些是在您声明队列但不提供名称时创建的。但是,我不这样做。

更多信息:这两个应用程序使用不同的 rabbitMQ 登录名,队列由我的应用程序(发布者)创建,而不是消费者应用程序。我没有队列名称,我的队列声明如下所示:

<amqp:connector name="amqpConnector"
    host="${myApp.status_reporting.host}"
    port="${myApp.status_reporting.port}"
    username="${myApp.status_reporting.username}"
    password="${myApp.status_reporting.password}"
    requestedHeartbeat="${myApp.status_reporting.requestedHeartbeat}"
    doc:name="AMQP Connector for Status Messages"/>


<flow name="cwm_send" doc:name="cwm_send">
    <amqp:outbound-endpoint 
        exchangeName="${myApp.status_reporting.exchange_name}"
        exchangeType="topic"
        exchangeDurable="${myApp.status_reporting.exchange_is_durable}"
        routingKey="${myApp.status_reporting.routing_key}"
        connector-ref="amqpConnector" 
        doc:name="AMQP Out" 
        queueDurable="true" 
        responseTimeout="10000"
    />
</flow>

如您所见,没有队列名称。只是一个路由键。

我的问题是:如果没有与此路由键匹配的队列绑定到此交换,这就是创建这些临时队列的原因吗?我的应用程序如何检索锁定在其中的消息?我在架构上做错了吗?

对于开放式问题,我很抱歉,但我得从某个地方开始。

4

1 回答 1

1

outbound-endpoint没有exchange-pattern配置。IIRC 它默认为request-response.

鉴于没有REPLY_TO标头,端点决定创建一个临时队列,将消息发送到交换器并在临时队列中订阅答案。

如果您不希望这种行为,只需添加exchange-pattern="one-way"到出站端点。

于 2015-06-14T12:28:01.533 回答