【问题标题】:RabbitMQ creates a temporary queue but don't know how or whenRabbitMQ 创建一个临时队列但不知道如何或何时
【发布时间】:2015-08-29 02:17:15
【问题描述】:

我将 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>

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

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

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

【问题讨论】:

  • 您介意分享amqp:inbound-endpoint 配置吗?
  • 这是在不同的应用程序上完成的。没有源代码。

标签: rabbitmq mule amqp rabbitmq-exchange


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。我会试试这个,让你知道它是否有效。
猜你喜欢
  • 2013-04-08
  • 1970-01-01
  • 2011-06-09
  • 2013-04-28
  • 2010-12-07
  • 2020-02-04
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多