03 rabbitmq之Work queues
rabbitmq有多种工作模式,这一节我们将阐述它的Work queues的用法。
1、前提约束
- 已经完成rabbitmq的第一个简单的测试程序
https://www.jianshu.com/p/77bfc4fe5a1a - 2、操作步骤
我们马上要测试的rabbitmq的工作模式如下:
![Work queues]()
- 在src/main/java文件夹下创建包net.wanho.rabbitmq.workqueues
- 在net.wanho.rabbitmq.workqueues创建Worker.java
package net.wanho.rabbitmq.workqueues;
import com.rabbitmq.client.*;
import java.io.IOException;
public class Worker {
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
factory.setHost("localhost");
factory.setHost("localhost");
final Connection connection = factory.newConnection();
final Channel channel = connection.createChannel();
String queueName = "task_queue";
channel.queueDeclare(queueName, true, false, false, null);
DefaultConsumer consumer = new DefaultConsumer(channel) {
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
//交换机
String exchange = envelope.getExchange();
//路由key
String routingKey = envelope.getRoutingKey();
//消息id
long deliveryTag = envelope.getDeliveryTag();
//消息内容
String msg = new String(body, "utf-8");
System.out.println("receive message:" + msg);
}
};
/*** 监听队列String queue, boolean autoAck,Consumer callback *
* 参数明细
* 1、队列名称
* 2、是否自动回复,
* 设置为true为表示消息接收到自动向mq回复接收到了,mq接收到回复会删除消息,
* 设置为false则需要手动回复
* 3、消费消息的方法,消费者接收到消息后调用此方法
* */
channel.basicConsume(queueName, true, consumer);
}
}
- 在net.wanho.rabbitmq.workqueues创建NewTask.java
package net.wanho.rabbitmq.workqueues;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;
public class NewTask {
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
String queueName = "task_queue";
channel.queueDeclare(queueName, true, false, false, null);
String message = "task";
channel.basicPublish("", queueName,
MessageProperties.PERSISTENT_TEXT_PLAIN,
message.getBytes("UTF-8"));
System.out.println("send" + message);
}
}
- 测试
先启动一个Worker,再启动一个Worker,再启动NewTask,始终只有一个Worker能收到消息。
以上就是我们完成的rabbitmq的work queues模式的测试。这个模式其实与第一个demo是一致的。


浙公网安备 33010602011771号