AMQP中每个队列的唯一消息是什么?

7
这与这个问题类似,但有点不同:根据规范,AMQP消息的消息ID应由应用程序自己设置,因此理论上我可以使用它来保证某种程度的唯一性,对吗?
我的主要问题是:在哪个范围内可以保证该消息ID是唯一的?仅针对特定队列中当前排队的消息?所有队列?整个宇宙?:-)
这种行为是否标准化?我打算在这里使用RabbitMQ,但最好有些不特定于供应商的东西:-)
谢谢。

我们经常使用RabbitMQ,并且没有专门设置message-id,也从未遇到过问题。我们有6个应用程序,20个交换机,40多个队列,每月大约有6000条消息。所以这并不能回答你的问题,但是暗示着它不需要是唯一的。 - Simon Thompson
你为什么希望消息是唯一的?如果您提供更多关于您想要实现的目标的信息,我们将能够更好地帮助您。 - cdeszaq
2个回答

2
另一个建议是根据“排放管道-智能端点”思想来处理。您可以在应用程序中处理独特性,使用某种共享状态。当我们从Gearman切换到RabbitMQ时,我们遇到了同样的问题。我们使用memcached来跟踪已发布的唯一消息ID,并且消费者会删除那些消息ID在memcache中已经存储过的消息(重复消息)。在将其全部放入队列之前,您还可以检查memcache。这使您摆脱了在消息总线层使用此功能的束缚(因此,您可以更轻松地在不保证唯一性的代理之间切换)。

1
你在Memcached中使用什么命令?从我看到的可用命令来看,它似乎是竞态条件的一个很好的入口。在这里使用Redis的SETNX不更实用吗? - Horst Gutmann
1
您可以使用add()函数,它确保只有一个进程可以设置键(其他进程会得到Memcached::RES_NOTSTORED)。这适用于单个memcached实例,但不确定在集群中如何工作。 - Joost Pastoor

1
“消息 ID”仅适用于应用程序,并不一定唯一。您需要自己确保其唯一性。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接