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

RabbitMQ通信模型之路由模型

網絡 通信技術
本文介紹了 RabbitMQ 通信模型中的路由模型的使用,通過交換機和路由鍵實現點對點通信,適合于需要點對點通信的場景。

大家好,我是了不起。

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

往期傳送門

??RabbitMQ(一)hello world??

??RabbitMQ(二)通信模型之work模型??

??RabbitMQ(三)通信模型之發布訂閱模型??

路由模型

RabbitMQ 提供了五種不同的通信模型,上一篇文章中,簡單的介紹了一下RabbitMQ的發布訂閱模型模型。這篇文章來學習一下RabbitMQ中的路由模型(direct)。

路由模型(direct):路由模式相當于是分布訂閱模式的升級版,多了一個 路由key來約束隊列與交換機的綁定。

在路由模型中,生產者將消息發送到交換機,交換機根據消息的路由鍵將消息轉發到對應的隊列中。每個隊列可以綁定多個路由鍵,每個路由鍵可以綁定到多個隊列中。消費者從隊列中接收消息并處理。當一個路由鍵被多個隊列綁定時,交換機會將消息發送到所有綁定的隊列中。當一個隊列綁定多個路由鍵時,該隊列將能夠接收到所有路由鍵對應的消息。

適用場景

路由模型適用于需要點對點通信的場景,例如:

  1. 系統監控告警通知;
  2. 任務分發;
  3. 用戶私信系統;
  4. 訂單確認通知等。

演示

  1. 生產者
// 生產者
public class Producer {
private static final String EXCHANGE_NAME = "exchange_direct_1";
// 定義路由的key,key值是可以隨意定義的
private static final String EXCHANGE_ROUTING_KEY1 = "direct_km1";
private static final String EXCHANGE_ROUTING_KEY2 = "direct_km2";

public static void main(String[] args) throws IOException, TimeoutException {
Connection connection = ConnectionUtils.getConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare(EXCHANGE_NAME, "direct");
for (int i = 0; i < 100; i++) {
if (i % 2 == 0) {
channel.basicPublish(EXCHANGE_NAME, EXCHANGE_ROUTING_KEY1, null, ("路由模型發送的第 " + i + " 條信息").getBytes());
} else {
channel.basicPublish(EXCHANGE_NAME, EXCHANGE_ROUTING_KEY2, null, ("路由模型發送的第 " + i + " 條信息").getBytes());
}
}
channel.close();
connection.close();
}
}
  1. 消費者
// 消費者1
public class Consumer {
private static final String QUEUE_NAME = "queue_direct_1";
private static final String EXCHANGE_NAME = "exchange_direct_1";
private static final String EXCHANGE_ROUTING_KEY1 = "direct_km1";

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, "direct");
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, EXCHANGE_ROUTING_KEY1);
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_direct_2";
private static final String EXCHANGE_NAME = "exchange_direct_1";
private static final String EXCHANGE_ROUTING_KEY2 = "direct_km2";

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, "direct");
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, EXCHANGE_ROUTING_KEY2);
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);
}
}
  1. 測試
    先啟動2個消費者,再啟動生產者
    可以得到結果是消費者1得到了序號是偶數的消息
    消費者2得到了序號是奇數的消息

小結

本文介紹了 RabbitMQ 通信模型中的路由模型的使用,通過交換機和路由鍵實現點對點通信,適合于需要點對點通信的場景。在實際使用過程中,需要注意以下幾點:

  1. 路由鍵必須要與消費者綁定隊列時的路由鍵相同,否則無法接收到消息;
  2. 可以通過多個交換機和路由鍵來實現更靈活的消息路由。

后續了不起還會繼續更新RabbitMQ的系列文章,感興趣的小伙伴持續關注哦~~~

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

2023-01-09 08:21:15

通信模型work

2023-01-11 08:22:22

RabbitMQ通信模型

2023-03-03 08:18:41

2012-12-17 09:45:05

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

2024-08-16 16:32:29

2024-08-14 08:11:41

2021-02-21 08:31:45

物聯網MQTT消息

2024-05-10 08:57:19

DICOM通信模型.NET

2022-12-05 09:25:17

Kubernetes網絡模型網絡通信

2023-10-30 09:00:00

大語言模型龍與地下城人工智能

2020-09-15 10:25:13

Redis命令Java

2017-06-29 13:29:34

大數據PAI機器學習

2009-06-17 14:38:14

面向對象數學模型物理模型

2025-06-26 04:10:00

2009-09-10 17:44:36

DOM模型INQ模型

2023-08-11 13:54:31

AI因果

2024-09-05 12:41:43

2023-11-20 08:54:38

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品欧美一区二区三区精品久久 | 久久久精品久久久 | 欧美在线观看一区 | 亚洲成人精品 | 欧美精品综合在线 | 欧美最猛黑人xxxx黑人 | 天堂亚洲网 | 久久天天躁狠狠躁夜夜躁2014 | 欧美一区二区三区在线视频 | 福利视频一区二区三区 | 国产一区二区在线播放视频 | 做a视频在线观看 | 一区二区三区亚洲精品国 | 成人久久 | 国产精品1区2区 | 日韩中出 | 亚洲精品国产精品国自产在线 | 在线一区观看 | 日韩伦理一区二区 | www97影院 | 久久精品一区 | 午夜欧美一区二区三区在线播放 | 中文字幕 在线观看 | 亚洲三级国产 | 欧美男人天堂 | 91国内精精品久久久久久婷婷 | 自拍偷拍小视频 | 亚洲综合视频 | 欧美二区在线 | 狼人伊人影院 | 国产精品成人国产乱 | 三级黄色片在线 | 国产精品99久久久精品免费观看 | 久久日韩精品一区二区三区 | av天天看| 综合第一页 | 日韩免费视频一区二区 | 亚洲午夜精品一区二区三区他趣 | 97超碰成人| 欧美黑人又粗大 | 不卡在线视频 |