官方文档
简单队列模型
![](https://img.haomeiwen.com/i14474902/e87422b2e01faf6c.png)
简单队列适用于有且仅有一个生产者与一个消费者的情形,耦合性高,生产者--对应消费者。如果我想有多个消费者消费消息,简单队列无法满足。并且当队列名变更时,得同时修改代码
生产者代码
public class Producer{
private static final String QUEUE_NAME = "simple_queue";
public static void main(String[] args) throws IOException, TimeoutException {
// 获取连接
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
// 创建通道
Channel channel = connection.createChannel();
// 声明队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String msg = "hello simple queue";
channel.basicPublish("", QUEUE_NAME, null, msg.getBytes());
System.out.println("sending...");
channel.close();
connection.close();
}
}
消费者代码
public class Rec {
private static final String QUEUE_NAME = "simple_queue";
public static void main(String[] args) throws IOException, TimeoutException {
// 获取连接
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
// 创建信道
Channel channel = connection.createChannel();
// 队列声明
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
// 接收到消息后的回调函数
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [x] Received '" + message + "'");
};
// 监听队列,每当队列中接收到新消息后会触发回调函数
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
}
}
工作队列模型
![](https://img.haomeiwen.com/i14474902/bef299c7dc209e88.png)
工作队列解决简单队列只能有一个消费者的问题,实际上工作队列就是启动了多个消费者。
网友评论