我们有一个 RabbitMQ 交换器,它在我们系统的几个组件之间交换消息。
每个组件都是交易所的发布者和订阅者。
我们需要找到一种方法来确保每个应用程序都不会收到它发送到交换中的消息。
例如。
应用 1 发送刷新消息。我们希望这适用于除 App 1 之外的所有交易所订阅者
我可以看到您可以指定路由属性,但这似乎定义了您想要的消息而不是您不想要的消息。
有任何想法吗?
RabbitMQ 无法直接实现您的要求。从 RMQ 的工作方式以及系统的设计方式来看,这有点落后。
也就是说,您无法过滤或“选择性”指定消费者接收的消息。最终,“选择性消费者”是 RabbitMQ 中的一种反模式。一旦消息进入队列,侦听该队列的消费者可能会收到该消息(取决于附加的消费者数量等)。
根据我的经验,处理此问题的最佳方法是更改您的 RMQ 拓扑和应用程序设计,以便这不会成为问题(可能不可能),或者让您的应用程序知道它发送的是哪条消息,并忽略任何内容它发送。
我认为第一个选项更好(确保良好的应用程序/拓扑设计不会发生这种情况),但第二个选项通常更容易......
为此,您可以向消息中添加自定义属性,例如“publisher-id”或类似属性。让您的消费者代码检查以确保消息的发布者 ID 与其自己的发布者 ID不匹配。如果它匹配,确认消息而不做任何事。如果不匹配,则正常处理消息。
| 归档时间: |
|
| 查看次数: |
8182 次 |
| 最近记录: |