前言
本文我们来学习下RabbitMQ的几种工作模式,通过具体的demo实战来体会下RabbitMQ的美妙之处。
工作队列模式
简介
工作队列模式(work queue):生产者发送消息,启动多个消费者实例来消费消息,每个消费者仅消费部分信息,可达到负载均衡的效果。
代码实战
新建maven工程,添加依赖:
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.9.0</version>
</dependency>
生产者核心代码如下:
public class Producer {
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
// ...省略配置uri的代码factory.setUri("amqp://root:123456@...:5672/%2f");
final Connection connection = factory.newConnection();
final Channel channel = connection.createChannel();
// 声明一个消息队列
channel.queueDeclare("queue.wq", true, false, false, null);
// 声明direct交换器
channel.exchangeDeclare("ex.wq", BuiltinExchangeType.DIRECT, true, false, null);
// 将消息队列绑定到指定的交换器,并指定绑定键
channel.queueBind("queue.wq", "ex.wq", "key.wq");
for (int i = 0; i < 15; i++) {
channel.basicPublish("ex.wq",
"key.wq", null,
("工作队列:" + i).getBytes("utf-8"));
}
channel.close();
connection.close();
}
}
在生产者服务中,我们设置了一个for循环,往消息队列里发布15次消息。
消费者核心代码:
public class Consumer {
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
//...省略配置uri的代码 factory.setUri("amqp://root:123456@...:5672/%2f");
final Connection connection = factory.newConnection();
final Channel channel = connection.createChannel();
channel.queueDeclare("queue.wq", true,
false, false, null);
channel.basicConsume("queue.wq", new DeliverCallback() {
public void handle(String consumerTag, Delivery message) throws IOException {
S