[RabbitMQ]工作队列原理_代码实现
生活随笔
收集整理的這篇文章主要介紹了
[RabbitMQ]工作队列原理_代码实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Work Queues
工作隊列(又稱任務隊列)的主要思想是避免立即執行資源密集型任務,而不得不等待它完成。
相反我們安排任務在之后執行。我們把任務封裝為消息并將其發送到隊列。在后臺運行的工作進程將彈出任務并最終執行作業。當有多個工作線程時,這些工作線程將一起處理這些任務。
代碼實現
抽取工具類
public class RabbitMqUtils {//得到一個連接的 channelpublic static Channel getChannel() throws Exception{//創建一個連接工廠ConnectionFactory factory = new ConnectionFactory();factory.setHost("182.92.234.71");factory.setUsername("admin");factory.setPassword("123");Connection connection = factory.newConnection();Channel channel = connection.createChannel();return channel;} }啟動兩個工作線程
package com.atguigu.two;import com.atguigu.utils.RabbitMqUtils; import com.rabbitmq.client.CancelCallback; import com.rabbitmq.client.Channel; import com.rabbitmq.client.DeliverCallback;/**** 這是一個工作線程(相當于消費者)*/ public class Worker01 {//隊列的名稱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+ "消息被消費者取消消費接口回調邏輯");};/*** 消費者消費消息* 1.消費哪個隊列* 2.消費成功之后是否要自動應答 true 代表的自動應答 false 代表手動應答* 3.當消息傳達到后(成功之后)的回調* 4.消費者取消消費的回調*/System.out.println("C1等待接收消息......");channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);}}生產者代碼
package com.atguigu.two;import com.atguigu.utils.RabbitMqUtils; import com.rabbitmq.client.Channel;import java.util.Scanner;/*** 生產者 發送大量的消息**/ public class Task01 {//隊列名稱public static final String QUEUE_NAME = "hello";//發送大量消息public static void main(String[] args) throws Exception {Channel channel = RabbitMqUtils.getChannel();//隊列的聲明/*** 生成一個隊列* 1.隊列名稱* 2.隊列里面的消息是否持久化(磁盤) 默認情況消息存儲在內存中* 3.該隊列是否只供一個消費者進行消費 是否進行消費共享,false可以多個消費者消費 true:只能一個消費者消費* 4.是否自動刪除 最后一個消費者端開連接以后 該隊列是否自動刪除 true自動刪除 false不自動刪除* 5.其他參數*/channel.queueDeclare(QUEUE_NAME,false,false,false,null);//從控制臺當中接受信息Scanner scanner = new Scanner(System.in);while(scanner.hasNext()){String message = scanner.next();/**** 發送一個消息* 1.發送到哪個交換機* 2.路由的Key值是哪個 本次是隊列的名稱* 3.其他參數信息* 4.發送消息的消息體*/channel.basicPublish("",QUEUE_NAME,null,message.getBytes());System.out.println("發送消息完成:"+message);}}}測試
總結
以上是生活随笔為你收集整理的[RabbitMQ]工作队列原理_代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是胰腺神经内分泌肿瘤?
- 下一篇: 女人水多什么原因