成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

RabbitMQ之通信模型之發布訂閱模型

網絡 通信技術
本文到這里就結束了,介紹了RabbitMQ通信模型中的發布訂閱,適合于做模塊之間的異步通信。

大家好,我是指北君。

今天指北君帶領大家接著學習RabbitMQ,了解RabbitMQ的五大通信模型之一的發布訂閱模型;接下來還會有關于RabbitMQ的系列教程,對你有幫助的話記得關注哦~

發布訂閱模型

上一篇文章中,簡單的介紹了一下RabbitMQ的work模型。這篇文章來學習一下RabbitMQ中的發布訂閱模型。

發布訂閱模型(Publish/Subscribe):簡單的說就是隊列里面的消息會被多個消費者同時接受到,消費者接收到的信息一致。

發布訂閱模型適合于做模塊之間的異步通信。

圖片

適用場景

  1. 發送并記錄日志信息
  2. springcloud的config組件里面通知配置自動更新
  3. 緩存同步
  4. 微信訂閱號

演示

生產者

public class Producer {
private static final String EXCHANGE_NAME = "exchange_publish_1";

public static void main(String[] args) throws IOException, TimeoutException {
Connection connection = ConnectionUtils.getConnection();
Channel channel = connection.createChannel();
// 聲明交換機
channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
// 發送消息到交換機
for (int i = 0; i < 100; i++) {
channel.basicPublish(EXCHANGE_NAME, "", null, ("發布訂閱模型的第 " + i + " 條消息").getBytes());
}
// 關閉資源
channel.close();
connection.close();
}
}

消費者

// 消費者1
public class Consumer {
private static final String QUEUE_NAME = "queue_publish_1";
private static final String EXCHANGE_NAME = "exchange_publish_1";

public static void main(String[] args) throws IOException, TimeoutException {
Connection connection = ConnectionUtils.getConnection();
Channel channel = connection.createChannel();
// 聲明隊列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 聲明交換機
channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
// 將隊列綁定到交換機
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");
DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("隊列1接收到的消息是:" + new String(body));
}
};
channel.basicConsume(QUEUE_NAME, true, defaultConsumer);
}
}
// 消費者2
public class Consumer2 {
private static final String QUEUE_NAME = "queue_publish_2";
private static final String EXCHANGE_NAME = "exchange_publish_1";

public static void main(String[] args) throws IOException, TimeoutException {
Connection connection = ConnectionUtils.getConnection();
Channel channel = connection.createChannel();
// 聲明隊列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 聲明交換機
channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
// 將隊列綁定到交換機
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");
DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("隊列2接收到的消息是:" + new String(body));
}
};
channel.basicConsume(QUEUE_NAME, true, defaultConsumer);
}
}

測試

先啟動2個消費者,再啟動生產者

圖片

圖片

?可以看出來消費者1和消費者2接收到的消息是一模一樣的,每個消費者都收到了生產者發送的消息;

發布訂閱模型,用到了一個新的東西-交換機,這里也解釋一下相關方法的參數:

// 聲明交換機
channel.exchangeDeclare(EXCHANGE_NAME, "fanout");

// 該方法的最多參數的重載方法是:
Exchange.DeclareOk exchangeDeclare(String exchange,
BuiltinExchangeType type,
boolean durable,
boolean autoDelete,
boolean internal,
Map<String, Object> arguments) throws IOException;

/**
* param1:exchange,交換機名稱
* param2:type,交換機類型;直接寫 string效果一致;內置了4種交換機類型:
* direct(路由模式)、fanout(發布訂閱模式)、
* topic(topic模式-模糊匹配)、headers(標頭交換,由Headers的參數分配,不常用)
* param3:durable,是否持久化交換機 false:默認值,不持久化
* param4:autoDelete,沒有消費者使用時,是否自動刪除交換機 false:默認值,不刪除
* param5:internal,是否內置,如果設置 為true,則表示是內置的交換器, 客戶端程序無法直接發送消息到這個交換器中, 只能通過交換器路由到交換器的方式 false:默認值,允許外部直接訪問
* param6:arguments,交換機的一些其他屬性,默認值為 null
*/
// 將隊列綁定到交換機
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");
/**
* param1:destination,目的地,隊列的名字
* param2:source,資源,交換機的名字
* param3:routingKey,路由鍵(目前沒有用到routingKey,填 "" 即可)
*/

小結

本文到這里就結束了,介紹了RabbitMQ通信模型中的發布訂閱模型,適合于做模塊之間的異步通信。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2023-01-09 08:21:15

通信模型work

2023-03-01 08:23:11

通信模型RabbitMQ

2023-03-03 08:18:41

2012-12-17 09:45:05

統一通信混合通信通信網絡

2009-11-05 10:07:37

WCF設計模式

2020-09-15 10:25:13

Redis命令Java

2023-11-19 23:36:50

2024-05-14 08:03:51

C#EventArgs?屬性

2021-11-11 08:34:54

應用配置模板

2024-05-06 07:58:23

MoE模型系統

2017-09-14 14:43:07

NLP入門模型

2017-03-27 08:56:15

支付風控模型

2024-05-16 08:23:26

大語言模型知識圖譜人工智能

2024-12-26 00:46:25

機器學習LoRA訓練

2024-11-04 00:24:56

2024-11-26 09:33:44

2023-11-10 09:22:06

2023-08-28 07:28:41

項目領域層充血模型

2022-09-06 08:00:00

機器學習金融數據科學

2021-07-09 13:54:31

零信任網絡安全網絡攻擊
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区国产 | www久久av| 二区三区在线观看 | 雨宫琴音一区二区在线 | 成人三区 | 精品国产乱码久久久久久蜜柚 | 国产亚洲精品久久久久久牛牛 | 二区国产 | 91国产视频在线 | 天天操天天摸天天干 | 久久国产精品无码网站 | 九九九久久国产免费 | 色婷婷av一区二区三区软件 | 狼人伊人影院 | 久久久久国产一区二区三区 | 亚洲高清在线 | 国产成人自拍av | 欧美午夜视频 | 欧美激情啪啪 | 国产女人第一次做爰毛片 | 成人亚洲性情网站www在线观看 | 国产99久久精品一区二区永久免费 | 91九色视频 | 性做久久久久久免费观看欧美 | 国产精品无码久久久久 | www.日日夜夜| 成人免费视频 | 男人天堂99 | 久久久久国产精品一区二区 | 日韩在线不卡视频 | 成人免费视频观看视频 | 午夜影院在线观看版 | .国产精品成人自产拍在线观看6 | 日韩a在线| 欧美日韩一区在线 | 农村真人裸体丰满少妇毛片 | 密色视频 | 精品久久久久久久人人人人传媒 | 91视频三区 | 一区二区久久 | 国产精品综合一区二区 |