【问题标题】:Mule / AMQP / RabbitMQ: Trying to send to the default exchangeMule / AMQP / RabbitMQ:尝试发送到默认交换
【发布时间】:2013-05-29 14:38:53
【问题描述】:

使用带有 AMQP 传输插件和 RabbitMQ 的 Mule 3.4,我正在尝试将消息发送到默认的 AMQP 交换。 exchangeName 属性的文档状态为“留空或省略默认交换”。但是,如果我 (a) 省略它,像这样:

<amqp:outbound-endpoint routingKey="my.queue" connector-ref="amqpDefaultConnector" />

然后我收到错误消息:

元素 amqp:outbound-endpoint{connector-ref=amqpDefaultConnector, name=.test:outbound-endpoint.17, routingKey=process.task.complete} 必须具有其中一组的所有属性:[address] [ref] [queueName] [exchangeName] [exchangeName, queueName]。

这似乎表明省略该属性是无效的。但是,如果我 (b) 提供它但将其留空,如下所示:

<amqp:outbound-endpoint exchangeName="" routingKey="my.queue" connector-ref="amqpDefaultConnector" />

然后我收到错误消息:

java.net.URISyntaxException:索引 7 处的预期权限:amqp://

我相信我的其余配置和设置是正确的,因为使用命名交换可以按预期工作。任何帮助将不胜感激。

【问题讨论】:

    标签: rabbitmq mule amqp


    【解决方案1】:

    要分派到默认交换器,您需要传递queueName 中的队列名称而不是routingKey

    <amqp:outbound-endpoint exchangeName=""
                            queueName="my.queue"
                            connector-ref="amqpDefaultConnector" />
    

    【讨论】:

    • 谢谢大卫!这似乎行得通!但基于标准 AMQP 术语,它绝对是不直观的,您总是希望发布到交换并从队列中读取——而不是发布到队列——即使这是你在发布到默认交换时所做的实际操作使用路由键。我怀疑我不会是最后一个在这里尝试使用路由键的人;也许在未来的版本中,您可以使 routingKey 和 queueName 选项的行为方式相同。
    • 我知道就 AMQP 的概念而言这并不完美,这是为了满足 XSD 和配置解析的约束而做出的妥协。很高兴它仍然有效:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多