前提条件

已经实现了监听队列接收消息,具体步骤查看:RabbitMQ实现监听队列接收消息

介绍

工作模式是一个或者多个消费者共同消费一个队列中的消息,队列中的每一个消息只可能被其中一个消费者消费,比如:多个人抢一个蛋糕,只有一个人可以抢到

应用场景:对于消息任务很多的情况,可以使用工作队列提高任务处理的速度

原理:集群处理大量的消息

实现过程

批量发送消息

为了方便测试,在rabbitmq-producer模块下添加一个批量发送消息功能,可以自定义批量发送的消息数量

首先在sendInformationPage.html中添加一个form标签:

1
2
3
4
5
<form action="/sendInformationBatch">
<h2>批量发送</h2>
数量:<input type="text" name="informationCount">
<input type="submit" value="批量发送">
</form>

在IndexController类添加一个方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 批量发送消息
*
* @param informationCount
* @return
*/
@ResponseBody
@RequestMapping("/sendInformationBatch")
public String sendInformationBatch(Integer informationCount) {
for (Integer i = 1; i < informationCount + 1; i++) {
rabbitMQProducerService.sendInformation("消息" + i);
}
return "批量发送消息到RabbitMQ成功<a href='/toSendInformationPage'><button>继续发送</button></a>";
}

消费消息

在rabbitmq-consumer模块下修改

先在RabbitMQConsumerService类添加一个接口方法:

1
2
3
4
5
6
/**
* 监听队列接收消息
*
* @param message
*/
void receiveMessage3(String message);

然后在RabbitMQConsumerServiceImpl类中实现上面的接口方法

1
2
3
4
5
@Override
@RabbitListener(queues = {RabbitMQConfig.DIRECT_QUEUE})
public void receiveMessage3(String message) {
System.out.println("消费者2---接收到的消息:" + message);
}

测试

启动rabbitmq-producer模块和rabbitmq-consumer模块,然后在浏览器地址栏输入:http://localhost/toSendInformationPage 进入发送消息页面,根据自己的需要填入批量发送的消息数量,然后点击发送,最后去rabbitmq-consumer模块启动控制台查看结果