AMQP (rabbitmq) 识别错误消息的来源

AMQP (rabbitmq) identify origin of bad message

在 rabbitmq 中识别(错误的)AMQP 消息来源的最佳方法是什么?

场景是多个客户端将消息发布到服务器,如果成功,将导致消息发布到扇出交换(供 pub/sub 使用)。 客户端也是此 queue 的订阅者,并且没有自己的回复 queue。

如果服务器确定消息无效,它会拒绝并丢弃它。

我们还需要两件事:

什么是合适的策略?

哪些 header 字段适合识别邮件的发件人?

还有其他注意事项吗?

appid header字段可以识别发送应用程序,但它本身是不够的,因为一台或多台机器上可能有多个实例。

坏客户端可能会使用 messageid 来识别它发送的消息(可以由客户端分配或访问)。

一个监控系统(例如 prometheus+kubernetes)需要更多的尝试来杀死坏的客户端进程。

我假设一个合适的方法是要求客户设置某些 header 字段。

其次,我们可以为那些不符合我们要求的客户做些什么?

我对 AMQP 的经验有限,所以如果可以的话请改进

识别一个进程就够了

appid 是自由形式,因此一种方法可能是在其中包含的不仅仅是应用程序 ID。例如

appid: applicationid.serverip.pid

这看起来像是在扩展 "app id" 但 的语义。 应用程序可以使用 "app id" 通过简单的字符串比较来标识自己。

在基本属性之上,这样您就可以 instead/as 添加如下属性:

origin-host: serverip
origin-pid: pid

与使用像 app_id 这样的 'builtin' 字段相比,这可能需要一些额外的编程工作。还有一个与此相关的小 'over the wire' 成本(自定义属性 are serialized as positional arguments in message header instead of associative array to save bandwidth)。 与解码 appid 字段中的字符串相比,可能需要权衡取舍。

您还可以设置死信交换来保存消息本身,但消息需要操作员干预才能使用。所以我认为这只会有助于诊断。