首页 > 解决方案 > 多线程 RabbitMQ 消费者

问题描述

我正在使用 Java 开发一个简单的工作者微服务,它正在使用来自 RMQ 的(basicConsume)消息,处理它们并将它们插入数据库。目前,该服务为整个流程使用 1 个线程。

我的任务是在将数据插入数据库时​​重构它以使用多个线程。

这是我的设计理念: ![工人服务流程

如您所见,我使用主线程来消费消息并将它们推送到队列中。在流程结束时,我将数据库响应推送到另一个队列中,并从另一个线程确认它们中的每一个。

经过我的调查,如果相同的 Channel 用于消费和确认,那么这些操作是线程安全的。我无法理解如何改善与 RMQ 的通信以及另一个渠道是否可以提供帮助。正如文档所说,消费消息的通道必须是确认消息的通道。

我的问题是关于这个设计的想法:

  1. WDYT 关于消息队列的想法?
  2. 我应该使用另一个线程来使用这些消息并将它们推送到队列中吗?
  3. 如果 2. 的答案是肯定的,我应该为两个线程使用相同的 Channel 吗?
  4. 当我使用相同的 Channel 进行确认时,它会影响消费的效率吗?我的直觉说,虽然 Channel 用于确认,但 Channel 不能用于消费。我对吗?

标签: javamultithreadingrabbitmqmessage-queuechannel

解决方案


推荐阅读