0

我通过 amqplib 在 Python 中使用 rabbitmq。如果可能的话,我尝试将 AMQP 用于不只是队列的东西 - 按 ID 搜索消息,在出队之前修改它们,在出队之前从队列中删除。这些东西用于存储/更新平衡器的真实用户队列,并且可以通过更改真实用户的状态来异步更新该队列(例如,用户已死 - 他的 AMQP 消息必须被删除,或者用户更改了它的状态 -并且每个这样的更改都必须反映在用户的 AMQP 队列中,在适当的用户的 AMQP 消息中),并且在消息真正出队之前发生。我的问题如下:

  1. 有没有办法通过 amqplib 修改某个 queueN 中的 AMQP 消息正文,然后再将其 dequed ,通过其标头中的某个 ID 搜索它?我的意思是 - 我想在接收者发送消息之前修改消息正文。

  2. 有没有办法让工作人员通过 amqplib 从 queueN 中准确弹出 5 条(任意数量)最后一条消息?

  3. 我可以在队列N 出队之前从队列N 中异步删除消息,并且它的邻居会将它放在队列N 中吗?

  4. 来自 queueN 的消息 ID1 的方式是获取它的真实当前队列位置,从 queueN 的开头算起?AMQP 是否为任何消息存储/更新它的真实队列位置?

    提前致谢。

更新:根据 rabbitmq 文档,随机访问 AMQP 队列中的消息存在问题。请在 Python 中建议另一个正确的队列决策,它支持快速异步访问其元素-通过消息的正文搜索消息,更新/删除队列消息并获取任何队列消息的快速队列索引。我们尝试了使用 user_info 的 deque + 附加 dict,但在这种情况下,我们需要在每次更新时锁定这个 deque+dict,以避免竞争条件。主要目的 - 为负载均衡器的队列提供服务,并在计算队列中的更改时摆脱阻塞。

4

1 回答 1

0

您所描述的听起来像是一个非常典型的中间件管道。虽然这实现了在将消息传递给预期的消费者之前修改消息的相同效果,但它不能通过访问队列来工作。

基本思想是所有消息首先进入一个特殊的队列,在那里它们被传递到中间件。然后中间件根据它刚刚收到的消息组成一条新消息,并将其发布到预期接收者的队列

于 2013-03-19T13:37:44.707 回答