【发布时间】:2023-04-15 05:03:01
【问题描述】:
我正在开发一个使用 Spring Boot 版本 2.0.4.RELEASE 和 RabbitMQ 版本 3.7.7 的 Java 应用程序。该应用程序将来自 RabbitMQ 的所有消息缓存在 Redis 数据库中,并且在 RabbitMQ 中创建新队列时必须重新发送。目前,我设法使用Event Exchange Plugin 以及队列名称来捕获队列创建。我正在使用AMQP outbound adapter 将消息发送回 RabbitMQ。
流出
public IntegrationFlow outFlow(AmqpTemplate amqpTemplate) {
return IntegrationFlows.from(outputChannel())
.handle(Amqp.outboundAdapter(amqpTemplate)
.routingKeyExpression("headers.routingKey")
.exchangeNameExpression("headers.exchange"))
.get();
}
我可以使用 routingKey 将消息发送到特定的交换。但是,我不知道如何在出站适配器中配置队列名称。这样我就可以将消息发送到该特定队列。
【问题讨论】:
-
IIRC,将 routingKeys 映射到队列是您在 RabbitMQ 服务器中配置的东西,而不是在发送者中......所以发送者只需要知道他们应该使用什么正确的 routingKey,以及实际的队列隐藏在交换“后面”...
-
是的,发件人只需要知道'routingKey'和'exchangeName'。在我的场景中,我需要发送到特定队列,而不是链接到该特定交换的所有队列。如果可能的话,我很乐意绕过交换将消息直接发送到队列。
-
但是您可以将 RabbitMQ 交换配置为“知道”以将特定的 routingKey 路由到特定的队列 - 然后您的客户端通过选择正确的 routingKey,将看到其消息最终进入正确的队列。 ..
-
是的,我们可以使用“routingKey”将交换绑定到队列。不幸的是,我的规范之前要求不要创建队列。因此,当新客户端连接并订阅消息时,RabbitMQ 会创建一个新队列。所以可能有多个队列绑定到一个交换。但是,当创建一个新队列时,我想将消息发送到该特定队列,而不是所有队列都绑定到该交换。
-
您是否只想在注册时为每个队列创建一个路由密钥,然后以某种方式与所有客户端共享这些密钥?那样的话,他们会为正确的队列使用正确的路由键,而交换器会将其传递到相应的队列?
标签: java rabbitmq spring-integration spring-amqp