0
我有8个消费者在一个队列中,他们中的任何一个都可以接收消息,并且一旦处理完毕,就会影响数据库。大多数消息可以异步运行,但是在一些消息上,我们需要停止消耗队列,直到消息被其中一个消费者完全处理。在此期间,其他7位消费者不应该在队列中消耗。使用Rabbitmq实现阻塞消息(或在发布者和消费者之间进行确认)
有没有办法在rabbitmq中实现这一点,而不是做一个应用程序级解决方案(这可能很难实现)?
我有8个消费者在一个队列中,他们中的任何一个都可以接收消息,并且一旦处理完毕,就会影响数据库。大多数消息可以异步运行,但是在一些消息上,我们需要停止消耗队列,直到消息被其中一个消费者完全处理。在此期间,其他7位消费者不应该在队列中消耗。使用Rabbitmq实现阻塞消息(或在发布者和消费者之间进行确认)
有没有办法在rabbitmq中实现这一点,而不是做一个应用程序级解决方案(这可能很难实现)?
我不知道严格的RabbitMQ更改,使其工作。但是,这里的方法不需要修改任何旧代码,除了重命名生产者正在放置消息的队列。它确实需要编写一个新的消费者:
由于单个消费者只是转发异步消息,所以它可以快速完成并且不应该存在吞吐量问题。
当您收到同步消息时,是否需要停止处理所有消息,或者只是连续处理所有同步消息? – lreeder
@lreeder当一个同步(阻塞)消息进入时,我们需要停止获取它后面的所有消息(因为必须假设阻塞消息对db/cache进行了更改来处理它们),这很容易消费者,而不是8个消费者,没有rabbitmq的帮助,我们无法控制其他7个消费者 –