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

超詳細的RabbitMQ入門與實戰介紹,看這篇文章就夠了

開發 架構
這篇文章,我們就基于這個架構,在數據一致性方面做進一步的說明。同樣,我們以RabbitMQ這個消息中間件來舉例。

一、前情提示

上一篇文章《?教你面試的時候如何迅速完成90%以上的海量數據處理題?》,我們已經給出了一整套的數據一致性的保障方案。

我們從如下三個角度,給出了方案如何實現。并且通過數據平臺和電商系統進行了舉例分析。

  • 核心數據的監控。
  • 數據鏈路追蹤。
  • 自動化數據鏈路分析。

目前為止,我們的架構圖大概如下所示:

并且咱們之前對于這種架構下,如何基于MQ進行解耦的實現也做了詳細的說明。

那么這篇文章,我們就基于這個架構,在數據一致性方面做進一步的說明。同樣,我們以RabbitMQ這個消息中間件來舉例。

二、選擇性的訂閱部分核心數據

?首先一個基于MQ實現的細節點就在于,比如對數據監控系統而言,他可能僅僅只是要從MQ里訂閱部分數據來消費罷了。

這個是啥意思呢?因為比如實時計算平臺他是會將自己計算出來的所有的數據指標都投遞到MQ里去的。

但是這些數據指標可能是多達幾十個甚至是幾百個的,這里面不可能所有數據指標都是核心數據吧?

基本上按照我們過往經驗而言,對于這種數據類的系統核心數據指標,大概就占到10%左右的比例而已。

然后對于數據查詢平臺而言,他可能是需要把所有的數據指標都消費出來,然后落地到自己的存儲里去的。

但是對于數據監控系統而言,他只需要過濾出10%的核心數據指標即可,所以他需要的是有選擇性的訂閱數據。

咱們看看下面的圖,立馬就明白是什么意思了。?

三、RabbitMQ的queue與exchange的綁定

不知道大家是否還記得之前講解基于RabbitMQ實現多系統訂閱同一份數據的場景。

我們采用的是每個系統使用自己的一個queue,但是都綁定到一個fanout exchange上去,然后生產者直接投遞數據到fanout exchange。

fanout exchange會分發一份數據,綁定到自己的所有queue上去,然后各個系統都會從自己的queue里拿到相同的一份數據。

大家再看看下面的圖回顧一下。

在這里有一個關鍵的代碼如下所示:

?也就是說,把自己創建的queue綁定到exchange上去,這個綁定關系在RabbitMQ里有一個專業的術語叫做:binding。

四、direct exchange實現消息路由

如果僅僅使用之前的fanout exchange,那么是無法實現不同的系統按需訂閱數據的,如果要實現允許不同的系統按需訂閱數據,那么需要使用direct exchange。

direct exchange允許你在投遞消息的時候,給每個消息打上一個routing key。同時direct exchange還允許binding到自己的queue指定一個binding key。

這樣,direct exchange就會根據消息的routing key將這個消息路由到相同binding key對應的queue里去,這樣就可以實現不同的系統按需訂閱數據了。

說了這么多,是不是感覺有點暈,老規矩,咱們來一張圖,直觀的感受一下怎么回事兒:

而且一個queue是可以使用多個binding key的,比如說使用“k1”和“k2”兩個binding key的話,那么routing key為“k1”和“k2”的消息都會路由到那個queue里去。

同時不同的queue也可以指定相同的ruoting key,這個時候就跟fanout exchange其實是一樣的了,一個消息會同時路由到多個queue里去。

五、按需訂閱的代碼實現

首先在生產者那塊,比如說實時計算平臺吧,他就應該是要定義一個direct exchange了。

如下代碼所示,所有的數據都是投遞到這個exchange里去,比如我們這里使用的exchange名字就是“rt_data”,意思就是實時數據計算結果,類型是“direct”:

channel.exchangeDeclare(
"rt_data",
"direct");

而且,在投遞消息的時候,要給一個消息打上標簽,也就是他的routing key,表明這個消息是普通數據還是核心數據,這樣才能實現路由,如下代碼所示:

上面第一個參數是指定要投遞到哪個exchange里去,第二個參數就是routing key,這里的“common_data”代表了是普通數據,也可以用“core_data”代表核心數據,實時計算平臺根據自己的情況指定普通或者核心數據。

然后消費者在進行queue和exchange的binding的時候,需要指定binding key,代碼如下所示:

上面第一行就是在消費者那里,比如數據監控系統那里,也是定義一下direct exchange。

然后第二行就是定義一個“rt_data_monitor“這個queue。

第三行就是對queue和exchange進行綁定,指定了binding key是“core_data”。

如果是數據查詢系統,他是普通數據和核心數據都要的,那么就可以在binding key里指定多個值,用逗號隔開,如下所示:

channel.queueBind(
"rt_data_query",
"rt_data",
"common_data, core_data");

到這里,大家就明白如何對數據打上不同的標簽(也就是routing key),然后讓不同的系統按需訂閱自己需要的數據了(也就是指定binding key),這種方式用到了direct exchange這種類型,非常的靈活。

最后,再看看之前畫的那幅圖,大家再來感受一下即可:

六、更加強大而且靈活的按需訂閱

?RabbitMQ 還支持更加強大而且靈活的按需數據訂閱,也就是使用topic exchange,其實跟direct exchange是類似的,只不過功能更加的強大罷了。

比如說你定義一個topic exchange,然后routing key就需要指定為用點號隔開的多個單詞,如下所示:?

然后,你在設置binding key的時候,他是支持通配符的。 * 匹配一個單詞,# 匹配0個或者多個單詞,比如說你的binding key可以這么來設置:

這個product.*.* ,就會跟“product.common.data”匹配上,意思就是,可能某個系統就是對商品類的數據指標感興趣,不管是普通數據還是核心數據。

所以到這里,大家就應該很容易明白了,通過RabbitMQ的direct、topic兩種exchange,我們可以輕松實現各種強大的數據按需訂閱的功能。

通過本文,我們就將最近講的數據一致性保障方案里的一些MQ中間件落地的細節給大家說明白了。

責任編輯:姜華 來源: 今日頭條
相關推薦

2017-03-30 22:41:55

虛擬化操作系統軟件

2021-11-10 07:47:48

Traefik邊緣網關

2019-09-25 09:17:43

物聯網技術信息安全

2021-09-30 07:59:06

zookeeper一致性算法CAP

2022-05-27 08:18:00

HashMapHash哈希表

2024-03-26 00:00:06

RedisZSet排行榜

2018-10-31 17:22:25

AI人工智能芯片

2019-10-31 09:48:53

MySQL數據庫事務

2018-08-17 09:14:43

餓了么容器演進

2020-10-13 07:44:40

緩存雪崩 穿透

2024-02-28 08:59:47

2017-12-12 12:53:09

2017-03-10 21:04:04

Android適配

2017-03-07 15:35:26

Android適配 界面

2021-04-09 10:03:12

大數據exactly-onc

2019-08-16 09:41:56

UDP協議TCP

2019-07-10 15:15:23

JVM虛擬機Java

2023-11-09 07:44:21

2020-12-09 08:01:38

Mybatis關系型數據庫

2021-01-15 12:56:36

人工智能人工智能應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色综合久 | 色综合天天综合网国产成人网 | 国产一级大片 | 天堂av在线影院 | 久草成人| 91久久精品日日躁夜夜躁欧美 | 欧美一区在线视频 | 亚洲第一区久久 | 欧美一区成人 | 日本三级日产三级国产三级 | 2021狠狠干 | 亚洲成av | 国产欧美精品一区二区色综合 | 久久九九免费 | 日本一区二区不卡 | 丁香久久 | 久久久精品视频免费看 | 久久综合久久自在自线精品自 | 亚洲国产精品99久久久久久久久 | 自拍偷拍第一页 | 亚洲欧美一区二区三区在线 | 黄色av免费 | 国产精品亚洲精品日韩已方 | 最新国产视频 | 国产一区免费视频 | 欧美 日本 国产 | 久久久国产一区二区三区 | 久久精品一区二区三区四区 | 亚洲一区久久 | 日本黄色一级视频 | 在线小视频 | 永久精品 | www.色.com| 国产精品a久久久久 | 国产农村妇女精品一区 | 成人免费视频 | 午夜精品一区二区三区免费视频 | 爱爱免费视频网站 | 成年人黄色免费视频 | 国产精品99一区二区 | 韩日在线视频 |