nsd*_*div 4 rabbitmq spring-rabbit spring-amqp
这是场景 - 有多个应用服务器。浏览器可以通过 websocket 连接到任何应用服务器。
应用服务器(消费者)都在监听一个特定的队列。一旦接收到 Web 套接字连接,特定的应用程序服务器就会将带有路由键 {userId} 的队列绑定到直接交换。
我希望发送到带有路由密钥 {userId} 的直接交换的消息只能由发生绑定的特定应用服务器接收。
在这种情况下,直接交换是正确的交换吗?还是应该使用其他类型的交换?
当 websocket 进入时,我正在使用 spring-amqp 创建动态绑定
// create the RabbitMq queue and bind to it
String routingKey = MessageConstants.getRoutingKeyForUserRecommendationQueue(user);
Binding userRecommendationBinding = BindingBuilder.bind(userRecommendationsQueue).
to(directExchange).with(routingKey);
amqpAdmin.declareBinding(userRecommendationBinding);
Run Code Online (Sandbox Code Playgroud)
向队列中的特定消费者发送消息
这不可能。连接到队列的任何消费者都有机会消费队列中的任何给定消息
我希望发送到带有路由键 {userId} 的直接交换的消息仅由发生绑定的特定应用程序服务器接收。
您可以通过为您的消费者创建exclusive/autoDelete队列来做到这一点,并使用一个绑定将该消费者的所有消息定向到该队列。
在这种情况下,直接交换是正确的交换吗?
直接交流或者话题交流都可以。直接交换稍微容易理解一些,但是话题交换更灵活
其实你走对了。
是的:使用适当的绑定直接交换应该可以拯救你。
在 RabbitMQ 教程中查看更多信息:http : //www.rabbitmq.com/tutorials/tutorial-four-java.html
还可以查看有关此事的 Spring AMQP 示例:https : //github.com/spring-projects/spring-amqp-samples/tree/master/rabbitmq-tutorials
更新
不幸的是,这不是正在发生的事情。消息似乎随机发送给任何消费者,而不仅仅是创建绑定的消费者。
嗯。这是可能的,因为我们只路由 my key,但之后消息被放置到队列中,该队列可能在不同的机器上有多个消费者。
在这种情况下是:动态绑定没有帮助。
您应该考虑创建一个独特的新队列(自动删除很好)并从中准确地绑定和侦听。该SimpleMessageListenerContainer支持addQueues()在运行时启动一个新的消费者对新的队列。
我认为这应该对你有用。
你还是不应该做的制片方任何东西:同exhchange和routingKey逻辑。
| 归档时间: |
|
| 查看次数: |
5850 次 |
| 最近记录: |