Py学习  »  MQ

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

Bruce Adams • 5 年前 • 482 次点击  

在rabbitmq中,识别(坏的)amqp消息来源的最佳方法是什么?

该场景是多个客户机向服务器发送消息,如果成功,将导致消息发送到扇出交换(供发布/订阅使用)。 客户端也是此队列的订阅服务器,并且没有自己的答复队列。

如果服务器认为一条消息无效,它会自动退出并丢弃它。

我们还需要两件事:

  • 发布一条消息,客户机或监控系统可能会用它来表示“停止向我发送垃圾”。
  • 记录关于错误消息的诊断

什么是合适的策略?

哪些标题字段适用于标识邮件的原始发件人?

他们还有其他的考虑吗?

这个 阿皮德 头字段可以标识发送应用程序,但它本身还不够,因为一台或多台计算机上可能有多个实例。

坏客户可能会使用 信息标识 识别它发送的消息(客户机可以分配或访问)。

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

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30895
 
482 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Bruce Adams
Reply   •   1 楼
Bruce Adams    5 年前

我在AMQP方面的经验有限,如果可以的话,请改进一下。

足够使用 host+pid 确定一个过程

AppID是自由形式的,因此一种方法可能不仅仅包括应用程序ID。例如

appid: applicationid.serverip.pid

这看起来像是在扩展“app id”的语义,但是 app_id is entirely application defined . 应用程序可以通过简单的字符串比较,用“app id”标识自己。

arbitrary key values are permitted 在基本属性的基础上,这样您可以/也可以添加如下属性:

origin-host: serverip
origin-pid: pid

这可能需要在使用“builtin”字段(如app_id)时进行少量的额外编程工作。与此相关的“over-the-wire”成本也很小(自定义属性 are serialized as positional arguments in message header instead of associative array to save bandwidth ) 这可能与解码 阿皮德 字段。

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