RabbitMQ/AMQP:多个队列,单个使用者

RabbitMQ/AMQP:多个队列,单个使用者,rabbitmq,amqp,node-amqp,Rabbitmq,Amqp,Node Amqp,我想创建一个消费者,它处理来自多个可变数量的源的消息,这些源是动态连接或断开的 我需要的是,每个消费者对每个来源的前N条消息进行优先级排序。然后运行多个消费者以提高速度 我一直在阅读、和以及许多其他文档,但没有确定如何实现这一点。我也做了一些没有运气的测试 有人能告诉我怎么做或者在哪里读到它吗 --编辑-- 队列A---A3--A2--A1-┐ 队列B---B3--B2--B1-┼------ 消费者 队列C-----C3--C2--C1-┘ 期望的效果是,每个消费者获得每个队列的第一条消息。例

我想创建一个消费者,它处理来自多个可变数量的源的消息,这些源是动态连接或断开的

我需要的是,每个消费者对每个来源的前N条消息进行优先级排序。然后运行多个消费者以提高速度

我一直在阅读、和以及许多其他文档,但没有确定如何实现这一点。我也做了一些没有运气的测试

有人能告诉我怎么做或者在哪里读到它吗

--编辑--

队列A---A3--A2--A1-┐

队列B---B3--B2--B1-┼------ 消费者

队列C-----C3--C2--C1-┘

期望的效果是,每个消费者获得每个队列的第一条消息。例如:A1、B1、C1、A2、B2、C2、A3、B3、C3等。如果创建了一个新队列(排队),消费者将开始以相同的方式接收来自该队列的消息

提前谢谢

我需要的是每个消费者对每个源的前N条消息进行优先级排序。然后运行多个消费者以提高速度

据我所知,所有消息队列都只在队列本身内提供排序保证(Kafka提供的排序保证不是在队列级别,而是在队列内的分区内)。但是,这里您要求序列化多个队列。这在分布式系统环境中是不可能的

为什么??因为如果这些队列有多个使用者,则消息将以循环方式传递给队列中每个连接的使用者

假设预回迁计数=1,并且有两个连接的使用者,则按如下方式发送第一组消息:

  • A1、B1和C1交付给消费者1(X)
  • A2、B2和C2交付给消费者2(Y)
现在,在分布式系统中,一切都是异步的,可能会出错。例如:

如果X确认A1、A3将交付给X,但如果Y确认A2在X之前,A3将交付给Y

在分布式系统中,谁先确认不在您的控制范围内。考虑以下情景:

  • X可能必须等待I/O或CPU绑定的任务,而Y可能幸运地不必等待。然后Y将通过队列中的消息前进
  • 或者Y被杀死(一个分区)或者n/w变慢,那么X将继续使用队列
我强烈建议你重新考虑你的要求,并在一个异步的上下文中考虑你的期望保证(否则你不会考虑一个妈妈,不是吗?)
PS:可以使用一些消费端逻辑实现您所要求的功能(对性能/吞吐量有一个惩罚)

  • 单个使用者必须连接到所有队列
  • 在确认消息之前,等待来自每个队列的消息
  • 收到来自每个队列的消息后,将其分组为单个消息并发布到另一个队列(P)
  • 现在,许多消费者可以订阅P来处理有序的消息组

我不建议这样做,但嘿,这是你的系统,谁来阻止你;)

你必须提供更多的细节,比如你想要实现什么,你的问题是什么。照原样,每个基于消息的应用程序都按照您所描述的做。