自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

RabbitMQ是如何實現(xiàn)消息路由的?

開發(fā) 前端
生產(chǎn)者把消息發(fā)送到 RabbitMQ Broker 上的Exchange 交換機上。Exchange 交換機把收到的消息根據(jù)路由規(guī)則發(fā)給綁定的隊列(Queue)。最后再把消息投遞給訂閱了這個隊列的消費者,從而完成消息的異步通訊。

?1.工作流程

RabbitMQ 是一個基于 AMQP 協(xié)議實現(xiàn)的分布式消息中間件。AMQP 的具體工作機制是,

圖片

生產(chǎn)者把消息發(fā)送到 RabbitMQ Broker 上的Exchange 交換機上。Exchange 交換機把收到的消息根據(jù)路由規(guī)則發(fā)給綁定的隊列(Queue)。最后再把消息投遞給訂閱了這個隊列的消費者,從而完成消息的異步通訊。

其中,Exchange交換機,可以定義消息的路由規(guī)則,將消息路由到指定的隊列。然后 Queue隊列是消息的載體,每個消息可以根據(jù)路由規(guī)則路由到一個或者多個隊列中。

2.路由策略

完成RabbitMQ消息路由的核心組件是 Exchange。而消息的路由是由Exchange類型 和 Binding 來決定的。Binding 表示建立 Queue 和 Exchange 之間的綁定關(guān)系,每一個綁定關(guān)系會存在一個 BindingKey。

通過這種方式相當于在 Exchange 中建立了一個路由關(guān)系表。生產(chǎn)者發(fā)送消息的時候,需要聲明一個 RoutingKey(路由鍵),Exchange 拿到RoutingKey 之后,根據(jù) RoutingKey 和路由表里面的 BindingKey 進行匹配,而匹配的規(guī)則是通過 Exchange類型來決定的。

在 RabbitMQ 中,默認有四種類型的 Exchange:Direct ,F(xiàn)anout、Topic和Header。

Direct,叫直連,也就是完整匹配方式,需要Routing Key 和 Binding Key 完全一致,相當于點對點的發(fā)送。如圖所示:

圖片

如果發(fā)送routing key為”spring”的消息,那么只有第一個隊列能收到消息。

Topic:叫主題,這種方式是通過設(shè)置通配符來動態(tài)匹配,相當于正則。就是用Routing Key 去匹配Binging Key。BingingKey支持兩個通配符。

代表匹配0個或者多個單詞

* 代表匹配不多不少一個單詞

另外,BingingKey用點隔開兩個單詞。

用*表示使用正則表達式進行匹配,如圖所示:

圖片

有4個隊列綁定到Topic類型的交換機,而且使用不同的綁定鍵。

如果發(fā)送routing key為"junior.abc.jvm" 的消息,那么,只有第一個隊列能收到。

如果發(fā)送routing key為"senior.netty"的消息,那么,第二個隊列和第三個隊列能收到。

Fanout:叫廣播,這種方式不需要設(shè)置Routing Key,而是把消息廣播給綁定到當前 Exchange 上的所有隊列上。如圖所示:

圖片

只要發(fā)送消息到Fanout Exchange上,那么三個隊列都能收到消息

RabbitMQ、Kafka、RocketMQ 是目前最主流的分布式消息中間件。有的同學可能對 Kafka 比較了解,有的同學可能對 RabbitMQ 比較了解。不過,在面試的時候,面試官一般會問你用過的技術(shù)組件。通過面試過程中推演出你的學習能力以及對技術(shù)的掌握能力,這個方面如果還不錯的話,接觸一個新的 MQ 組件所消耗的學習成本會比較小。

責任編輯:武曉燕 來源: Tom彈架構(gòu)
相關(guān)推薦

2022-07-26 20:00:35

場景RabbitMQMQ

2020-09-27 07:44:08

RabbitMQ投遞消息

2020-10-14 08:36:10

RabbitMQ消息

2024-05-23 12:11:39

2024-12-18 07:43:49

2024-05-09 08:04:23

RabbitMQ消息可靠性

2024-05-16 08:10:17

RabbitMQ軟件通信機制

2023-09-05 15:48:14

RabbitMQ延遲隊列

2024-12-31 00:00:00

RabbitMQ插件代碼

2023-12-04 09:23:49

分布式消息

2024-05-10 09:36:36

架構(gòu)消息隊列

2021-09-07 10:38:37

RabbitMQ 高可用消費

2020-08-26 07:17:19

通信

2019-02-25 15:44:16

開源RabbitMQSpring Clou

2024-01-31 09:42:11

RabbitMQ消息隊列.NET

2023-11-08 07:51:11

RabbitMQ接收消息

2025-03-12 07:55:46

2024-04-03 11:36:09

KafkaRabbitMQ架構(gòu)

2023-11-20 08:54:38

2021-09-16 10:29:05

開發(fā)技能代碼
點贊
收藏

51CTO技術(shù)棧公眾號