Work Queues
工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。
1 轮训分发消息
将启动两个工作线程,一个消息发送线程;
1.1 抽取工具类
public class RabbitMqUtils {
// 获取一个连接的channel
public static Channel getChannel() throws Exception{
// 创建一个连接工厂
ConnectionFactory factory = new ConnectionFactory();
// 工厂ip
factory.setHost("192.168.207.130");
// 用户名
factory.setUsername("admin");
// 密码
factory.setPassword("admin");
// 创建连接
Connection connection = factory.newConnection();
// 获取信道
Channel channel = connection.createChannel();
return channel;
}
}
1.2 启动两个工作线程
/**
* @author smartaotao
* @version 1.0.0
* @Description 工作线程(相当于消费者)
* @createTime 2023-02-16 23:05:00
*/
public class WorkerQueue01 {
// 队列名称
public static final String QUEUE_NAME = "hello";
public static void main(String[] args) throws Exception{
Channel channel = RabbitMqUtils.getChannel();
// 声明 接收消息
DeliverCallback deliverCallback = (consumerTag, message) -> {
System.out.println("接收到的消息: " + new String(message.getBody()));
};
CancelCallback cancelCallback = consumerTag -> {
System.out.println(consumerTag + "消费消息被中断");
};
channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);
}
}
1.3 启动一个发送线程