我成功使用RabbitMQ.但是,我有一个问题,如果我遇到队列中有大量消息的情况,那么消费者(Windows服务)会尝试全部获取它们然后只是保留它们但从不动作或确认它们.
当处于就绪状态的消息数量较少时,消费者处理吞吐量很好,就好像存在问题并且存在积压,那么它就太贪婪了.
有没有办法配置消费者在任何时候尝试并承担责任的最大消息数量?
我可以看到该RequestedChannelMax字段RabbitMQ.Client.ConnectionFactory是否正确设置限制此?
谢谢
在面向分布式服务的架构中,假设我有一个生产者,它使用 RMQ 向消费者发送消息。
然后我们决定通过添加更多消费者来横向扩展我们架构的消费部分,但我们面临一些限制。
发布者在它发送的每条消息中都提供一个序列号。消费者根据其拥有的序列号处理消息非常重要。
每次处理给定的资源时,比如说 A,发布者都会发送 RMQ 消息说“嘿,让我们为 A 做序列 1”然后“嘿,让我们为 A 做序列 2”等等。
例如,如果发布者为 A 提供了 3 条消息,序列为 1、2 和 3,并且这 3 条消息被分发到我们消费者的 3 个不同实例。序列 2 的消息重新排队,直到序列 1 被很好地处理,序列 3 也是如此。
最后消息都得到了很好的处理,但是经过多次重试!如果我们有 100 个序列要消耗,这会在我们的系统中导致一些延迟,因为我们会多次重试。
一种可能的解决方案是确保给定资源的每组序列都必须由同一个使用者处理。但是我们怎样才能做到这一点呢?
我怎样才能避免重新排队以确保我们的消费者的每个实例总是得到有序的给定资源的消息?