消息队列与随机读写访问队列元素,然后去队列(rabbitmq或)



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

  1. 是否有办法通过amqplib修改AMQP消息体一些队列在它被取出之前,通过某个ID来搜索它这是头?我的意思是-我想修改消息体之前按接收器发送。

  2. 是否有办法让工人弹出确切的5(任何数字)最后消息从queueN通过amqplib?

  3. 是否可以异步删除队列中的消息dequed,它的邻居会取代它在queueN中的位置?

  4. 这是来自queueN -的消息ID1获得真实消息的方式当前队列位置,从队列开始开始计算。AMQP是否存储/更新任何消息,它的实际队列位置?

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

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

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

最新更新