rabbiqMQ 是否可以在“消息数据”级别取消发布消息?
例如,如果我正在处理通过调用 API 发送到我的系统的发票,但该 API 分布在处理请求的多个 Web 服务器上,然后这些 Web 服务器将发票和发票 ID 放入队列中由工人处理。
假设每张发票都有一个唯一的发票 ID,并且只应处理一次,但有时同一张发票会多次发送到 API(并且每次可能会到达不同服务器上的相同 API 端点)。
是否可以设置rabbit MQ删除发票ID与已处理消息相同的任何消息?
所以我说的重复项不是“重复消息”,而是与“重复事物”相关的消息
我尝试在谷歌上搜索有关此问题的答案,但找不到任何非常明确的内容。
不,服务器不知道内容数据。 最佳实践是实施幂等系统。
有一些社区插件,例如https://github.com/noxdafox/rabbitmq-message-deduplication#queue-level-deduplication(我从未尝试过)
或者您可以使用流https://www.rabbitmq.com/blog/2021/07/28/rabbitmq-streams-message-deduplication