我想创建一个处理来自多个可变数量源的消息,这些消息是动态连接或断开的。
我需要的是每个消费者优先考虑每个来源的前N条消息。然后运行多个消费者以提高速度。
我一直在阅读Work queues,Routing和Topics以及许多其他文档的文档,而没有确定如何实现这一点。我也毫无运气地做了一些测试。
有人能指出我该怎么做或在哪里阅读它?
- 编辑 -
QueueA ----- A3 - A2 - A1-┐
QueueB ----- B3 - B2 - B1-┼------消费者
QueueC ----- C3 - C2 - C1-┘
期望的效果是每个消费者获得每个队列的第一条消息。例如:A1,B1,C1,A2,B2,C2,A3,B3,C3等。如果创建了新队列(QueueD),则消费者将以相同的方式开始从其接收消息。
提前致谢
答案 0 :(得分:0)
我需要的是每个消费者优先考虑每个来源的前N条消息。然后运行多个消费者以提高速度。
我所知道的所有消息队列仅在队列本身内提供排序保证(Kafka提供的排序保证不在队列级别,而是在队列内的分区内)。但是,在这里您要求序列化多个队列。这在分布式系统环境中是不可能的。
为什么?因为如果这些队列中有多个消费者,消息将以循环方式传递给队列中每个连接的消费者。
假设prefetch_count=1
并且有两个连接的消费者,请说明第一组消息如下:
现在,在分布式系统中,一切都是异步的,事情可能会出错。例如:
如果X确认A1,则A3将被交付给X.但如果Y在X之前获得A2,则A3将被交付给Y.
在分布式系统中,首先不在您的控制范围内。请考虑以下情况:
我强烈建议您重新考虑您的要求,并在异步环境中考虑您的预期保证(否则您不会考虑MoM,不是吗?)。
PS:可以通过一些消费者端逻辑来实现您的要求(性能/吞吐量会受到惩罚)。
我不建议,但嘿,这是你的系统,谁会阻止你;)