在出队之前对队列元素进行随机读/写访问的消息队列(rabbitmq或)

时间:2013-03-18 19:06:16

标签: python rabbitmq amqp

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

  1. 是否有办法通过amqplib来修改AMQP消息体 在它被取消之前的一些队列N,通过一些ID搜索它 它的标题?我的意思是 - 我想先修改邮件正文 由接收者发送。

  2. 工人有没有办法弹出 准确地从队列N通过amqplib获得5个(任意数量)的最后消息?

  3. 我是否可以异步删除来自queueN的消息 dequed,它的邻居会把它放在队列N中吗?

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

    提前致谢。

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

1 个答案:

答案 0 :(得分:0)

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

基本思想是所有消息首先进入特殊队列,然后将它们传递给中间件。然后,中间件根据刚刚收到的消息编写新消息,并将其发布到预期接收者的队列