SpringBoot实现RabbitMQ工作队列(附带实例)
除了一对一的简单队列模式,还有一个生产者对多个消费者的工作队列模式,该模式下可以是一个生产者将消息发送到一个队列,该队列对应多个消费者,此时每条消息只会被消费一次,多个消费者循环处理,如下图所示:

图 1 工作队列模式
设计一个发送者发送 100 条消息、两个接收者处理消息,观察两个接收端的执行效果。
1) 创建生产者。在下面的示例中,设计一个发送者连续发送 100 条消息:
2) 创建两个消费者。在下面的示例中,创建两个消费者来监听 rabbitmq_queue 队列,其中消费者 2 和消费者 1 的代码基本一致。
3) 验证测试。创建单元测试程序,启动发送者实例和两个接收者实例,循环发送 100 条消息,查看两个接收者的消息处理效果:

图 2 工作队列模式单元测试的运行结果
通过日志输出看到,一个发送者与 N 个接收者经过测试,接收端均匀接收到消息,每个消费者将获得相同数量的消息,也说明接收端自动均衡了负载,我们可以利用这个特性进行流量分发。

图 1 工作队列模式
设计一个发送者发送 100 条消息、两个接收者处理消息,观察两个接收端的执行效果。
1) 创建生产者。在下面的示例中,设计一个发送者连续发送 100 条消息:
public void produce() { for (int i=0;i<100;i++){ String message = new Date() + "Beijing"; System.out.println("生产者生产消息=====" + message); rabbitTemplate.convertAndSend("rabbitmq_queue", message); } }
2) 创建两个消费者。在下面的示例中,创建两个消费者来监听 rabbitmq_queue 队列,其中消费者 2 和消费者 1 的代码基本一致。
@Component public class Consumer { @RabbitHandler @RabbitListener(queuesToDeclare = @Queue("rabbitmq_queue")) public void process(String message) { Thread.sleep(1000) System.out.println("消费者消费消息222=====" + message); } }
3) 验证测试。创建单元测试程序,启动发送者实例和两个接收者实例,循环发送 100 条消息,查看两个接收者的消息处理效果:
@Test public void testWork() throws InterruptedException { producer.produce(); }单击 Run Test 或在方法上右击,选择 Run 'testWork',运行单元测试程序,查看后台输出情况,运行结果如下图所示。

图 2 工作队列模式单元测试的运行结果
通过日志输出看到,一个发送者与 N 个接收者经过测试,接收端均匀接收到消息,每个消费者将获得相同数量的消息,也说明接收端自动均衡了负载,我们可以利用这个特性进行流量分发。
相关文章
- SpringBoot实现RabbitMQ简单队列(附带实例)
- SpringBoot实现RabbitMQ广播模式(附带实例)
- SpringBoot集成RabbitMQ详解(附带实例)
- SpringBoot @PathVariable实现参数传递(附带实例)
- SpringBoot @Scheduled实现定时任务(附带实例)
- SpringBoot URL映射详解(附带实例)
- SpringBoot集成Redis详解(附带实例)
- SpringBoot传递参数的5种方法(附带实例)
- Spring Boot JPA分页查询的具体实现(附带实例)
- SpringBoot @Scheduled定时任务详解(附带实例)