在rabbitmq中识别(错误)AMQP消息来源的最佳方法是什么?
该方案是多个客户端将消息发布到服务器,如果成功,则会将消息发布到扇出交换机(供发布/订阅使用)。 客户端也是该队列的订阅者,并且没有自己的应答队列。
如果服务器认为邮件无效,则会对其进行处理并丢弃。
我们还需要另外两件事:
什么是合适的策略?
哪些标头字段适合标识邮件的始发者?
还有其他考虑吗?
appid 标头字段可以标识正在发送的应用程序,但仅凭其本身是不够的,因为在一台或多台计算机上可能有多个实例。
错误的客户端可能使用 messageid 来标识它发送的消息(客户端可以分配或访问该消息)。
例如,监视系统(例如prometheus + kubernetes)将需要更多尝试来消除不良的客户端进程。
我假设一种适当的方法是要求客户端设置某些标头字段。
第二,对于那些不符合我们要求的客户,我们该怎么办?
答案 0 :(得分:0)
我在AMQP方面的经验有限,因此,如果可以的话,请对此进行改进
使用host+pid来标识一个进程
appid是自由格式,因此一种方法可能是在其中包含多个应用程序ID。例如
appid: applicationid.serverip.pid
这看起来像是扩展了“ app id”的语义,但是app_id is entirely application defined。 应用程序可以通过简单的字符串比较来使用“应用程序ID”标识自己。
arbitrary key values are permitted在基本属性之上,因此您可以代替/也可以添加以下属性:
origin-host: serverip
origin-pid: pid
与使用诸如app_id之类的“内置”字段相比,这可能需要少量的额外编程工作。与此相关的还有一个小的“在线交易”成本(自定义属性are serialized as positional arguments in message header instead of associative array to save bandwidth)。 相对于解码 appid 字段中的字符串,可能需要权衡取舍。
您还可以设置死信交换来保留消息本身,但是消息将需要操作员干预才能使用。因此,我认为这只会对诊断有所帮助。