首页 > 编程笔记 > Java笔记 阅读:2

SpringBoot实现RabbitMQ工作队列(附带实例)

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


图 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 个接收者经过测试,接收端均匀接收到消息,每个消费者将获得相同数量的消息,也说明接收端自动均衡了负载,我们可以利用这个特性进行流量分发。

相关文章