EventBridge消息路由|高效构建消息路由能力
作者:肯夢(mèng)
企業(yè)數(shù)字化轉(zhuǎn)型過程中,天然會(huì)遇到消息路由,異地多活,協(xié)議適配,消息備份等場(chǎng)景。本篇主要通過 EventBridge 消息路由的應(yīng)用場(chǎng)景和應(yīng)用實(shí)驗(yàn)介紹,幫助大家了解如何通過 EventBridge 的消息路由高效構(gòu)建消息路由能力。
背景知識(shí)
EventBridge 消息路由主要涉及以下云產(chǎn)品和服務(wù):
- 事件總線 EventBridge
事件總線 EventBridge 是阿里云提供的一款無服務(wù)器事件總線服務(wù),支持阿里云服務(wù)、自定義應(yīng)用、SaaS 應(yīng)用以標(biāo)準(zhǔn)化、中心化的方式接入,并能夠以標(biāo)準(zhǔn)化的 CloudEvents?1.0 協(xié)議在這些應(yīng)用之間路由事件,幫助您輕松構(gòu)建松耦合、分布式的事件驅(qū)動(dòng)架構(gòu)。
- 消息隊(duì)列 RabbitMQ 版
阿里云消息隊(duì)列 RabbitMQ 版支持 AMQP 協(xié)議,完全兼容 RabbitMQ 開源生態(tài)以及多語言客戶端,打造分布式、高吞吐、低延遲、高可擴(kuò)展的云消息服務(wù)。開箱即用,用戶無需部署免運(yùn)維,輕松實(shí)現(xiàn)快速上云,阿里云提供全托管服務(wù),更專業(yè)、更可靠、更安全。
- 消息隊(duì)列 MNS 版
阿里云消息服務(wù) MNS 版是一款高效、可靠、安全、便捷、可彈性擴(kuò)展的分布式消息通知服務(wù)。MNS 能夠幫助應(yīng)用開發(fā)者在他們應(yīng)用的分布式組件上自由的傳遞數(shù)據(jù)、通知消息,構(gòu)建松耦合系統(tǒng)。
場(chǎng)景應(yīng)用
EventBridge 消息路由功能在構(gòu)建在構(gòu)建消息系統(tǒng)過程中主要應(yīng)用于下面三個(gè)場(chǎng)景,一是消息路由場(chǎng)景,二是消息多活場(chǎng)景,三是多協(xié)議適配場(chǎng)景,下面對(duì)這三個(gè)場(chǎng)景進(jìn)行簡(jiǎn)要介紹。
消息路由場(chǎng)景
該場(chǎng)景是指希望對(duì)消息進(jìn)行二次分發(fā),通過簡(jiǎn)單過濾或者篩選將消息分發(fā)到其他 Topic 或跨地域 Topic,實(shí)現(xiàn)消息共享 & 消息脫敏的場(chǎng)景。
通過一層轉(zhuǎn)發(fā)將消息分發(fā)給不同的 Topic 消費(fèi),是消息路由的核心能力。隨著企業(yè)轉(zhuǎn)型遇到消息拆分且做業(yè)務(wù)脫敏的場(chǎng)景會(huì)越來越多。如下圖是一個(gè)較為典型的路由分流場(chǎng)景。
消息多活場(chǎng)景
消息多活場(chǎng)景指每個(gè)數(shù)據(jù)中心均部署了完整、獨(dú)立的 MQ 集群。數(shù)據(jù)中心內(nèi)的應(yīng)用服務(wù)只連接本地的 MQ 集群,不連接其他單元的 MQ 集群。MQ 集群中包含的消息路由模塊,負(fù)責(zé)在不同單元 MQ 集群之間同步指定主題的消息。
根據(jù)應(yīng)用服務(wù)是否具有單元化能力,可分為中心服務(wù)和單元服務(wù)兩類。中心服務(wù)只在一個(gè)數(shù)據(jù)中心提供服務(wù);單元服務(wù)在各個(gè)數(shù)據(jù)中心都提供服務(wù),但只負(fù)責(zé)符合規(guī)則的部分用戶,而非全量用戶。
所有部署了單元服務(wù)的數(shù)據(jù)中心都是一個(gè)單元,所有單元的單元服務(wù)同時(shí)對(duì)外提供服務(wù),從而形成一個(gè)異地多活架構(gòu)或者叫單元化架構(gòu)。通過多活管控平臺(tái)可動(dòng)態(tài)調(diào)整各個(gè)單元服務(wù)負(fù)責(zé)的流量。
多協(xié)議適配場(chǎng)景
隨著業(yè)務(wù)團(tuán)隊(duì)的逐漸龐大,對(duì)消息的建設(shè)訴求與日俱增,由于部門技術(shù)棧的不同會(huì)導(dǎo)致部門間的消息協(xié)議也不盡相同。多協(xié)議適配是指用一種消息協(xié)議平滑遷移到多種消息協(xié)議的能力。
架構(gòu)描述
使用 EventBridge 的事件流能力做消息路由,事件流模型是 EventBridge 在消息領(lǐng)域主打的處理模型,適用標(biāo)準(zhǔn) Streaming(1:1)流式處理場(chǎng)景,無總線概念。用于端到端的消息路由,消息轉(zhuǎn)儲(chǔ),消息同步及處理等,幫助開發(fā)者輕松構(gòu)建云上數(shù)據(jù)管道服務(wù)。
下面的架構(gòu)展示了如何通過橋接 EventBridge 實(shí)現(xiàn) MNS 消息路由至 RabbitMQ Queues,MNS Queues。(A/B 鏈路任選其一進(jìn)行試驗(yàn))
應(yīng)用實(shí)驗(yàn)
目標(biāo)
通過本實(shí)驗(yàn)教程的操作,您可以通過阿里云控制臺(tái),在事件總線控制臺(tái)中創(chuàng)建消息路由服務(wù),在 EventBridge 控制臺(tái)實(shí)現(xiàn)消息路由與簡(jiǎn)單的消息脫敏。
體驗(yàn)此實(shí)驗(yàn)后,可以掌握的知識(shí)有:
- 創(chuàng)建消息路由任務(wù);
- 創(chuàng)建 RabbitMQ 實(shí)例、MNS 實(shí)例與簡(jiǎn)單的消息發(fā)送。
資源
使用到的資源如下:(本次實(shí)驗(yàn)資源遵循最小原則,使用滿足場(chǎng)景需求的最小化資源)
- 資源一:EventBridge 事件總線
- 資源二:阿里云消息隊(duì)列 RabbitMQ 版
- 資源三:阿里云消息隊(duì)列 MNS 版
步驟
1)創(chuàng)建 MNS 資源
本實(shí)驗(yàn)分 A /B 兩個(gè)可選場(chǎng)景:
A 、場(chǎng)景通過 MNS Queues1 投遞至 MNS Queues2
B 、場(chǎng)景通過 MNS Queues1 投遞至 RabbitMQ Queues
可根據(jù)興趣選擇不同場(chǎng)景。
本步驟將指導(dǎo)您如何通過控制臺(tái)創(chuàng)建消息隊(duì)列 MNS 版。
使用您自己的阿里云賬號(hào)登錄阿里云控制臺(tái),然后訪問消息隊(duì)列MNS版控制臺(tái)。 [1]
在控制臺(tái)左邊導(dǎo)航欄中,單擊隊(duì)列列表。(資源地域?yàn)橥赜蚣纯?#xff0c;本次引導(dǎo)默認(rèn)選杭州)
在列表頁面,單擊創(chuàng)建隊(duì)列并填寫名稱信息“test-mns-q”
創(chuàng)建完成后點(diǎn)擊“詳情”
?找到 MNS 公網(wǎng)接入點(diǎn)信息,并記住該信息,后續(xù)實(shí)驗(yàn)會(huì)用到。
??E.g.??http://1825725063814405.mns.cn-hangzhou.aliyuncs.com??
?
注意:重復(fù)如上步驟即可創(chuàng)建 A 實(shí)驗(yàn)鏈路的 “test-mns-q2”
2)創(chuàng)建 RabbitMQ 資源(B 實(shí)驗(yàn)可選)
本步驟將指導(dǎo)您如何通過控制臺(tái)創(chuàng)建消息隊(duì)列 RabbitMQ 版。
使用您自己的阿里云賬號(hào)登錄阿里云控制臺(tái),然后訪問消息隊(duì)列RabbitMQ版控制臺(tái)。 [2]
在控制臺(tái)左邊導(dǎo)航欄中,單擊實(shí)例列表。(資源地域?yàn)橥赜蚣纯?#xff0c;本次引導(dǎo)默認(rèn)選杭州)
在列表頁面,單擊創(chuàng)建實(shí)例,并完成創(chuàng)建。
創(chuàng)建完成后點(diǎn)擊詳情進(jìn)入實(shí)例詳情頁;
在“Vhost 列表” 創(chuàng)建 “test-amqp-v”;
在“Queue 列表” ,選擇 Vhost 為“test-amqp-v”,并創(chuàng)建 “test-amqp-q”;
3)創(chuàng)建 EventBridge 事件流任務(wù) ?- MNS TO MNS(A 實(shí)驗(yàn)可選)
本步驟將指導(dǎo)您如何通過控制臺(tái)創(chuàng)建 EventBridge 事件流。
使用您自己的阿里云賬號(hào)登錄阿里云控制臺(tái),然后訪問?EventBridge 控制臺(tái)。 [3]
注:第一次使用需開通。
單擊“事件流”列表,并在列表創(chuàng)建任務(wù) (資源地域?yàn)橥赜蚣纯?#xff0c;本次引導(dǎo)默認(rèn)選杭州)
創(chuàng)建事件流名稱為“test-amqp-mns2mns”,點(diǎn)擊下一步;
指定事件源,事件提供方為“消息服務(wù) MNS”,隊(duì)列名稱為“test-mns-q”,點(diǎn)擊下一步;
指定規(guī)則,規(guī)則部分可不做篩選,默認(rèn)匹配全部,直接點(diǎn)擊下一步;
?注意:規(guī)則內(nèi)容可根據(jù)需求自行指定,為降低難度本次實(shí)驗(yàn)?zāi)J(rèn)投遞全部,更多詳情請(qǐng)查閱:?
????https://help.aliyun.com/document_detail/181432.html??????
?
服務(wù)類型選擇“消息服務(wù) MNS”,隊(duì)列名稱選擇“test-mns-q2”,消息內(nèi)容選擇“部分事件”,點(diǎn)擊創(chuàng)建
?注意:消息內(nèi)容可根據(jù)需求自行指定,本次實(shí)驗(yàn)?zāi)J(rèn)投遞 data 字段,更多詳情請(qǐng)查閱:?
???https://help.aliyun.com/document_detail/181429.html?????
創(chuàng)建完成后,可點(diǎn)擊“啟動(dòng)”來啟動(dòng)事件流
4)創(chuàng)建 EventBridge 事件流任務(wù) - MNS TO RabbitMQ(B 實(shí)驗(yàn)可選)
本步驟將指導(dǎo)您如何通過控制臺(tái)創(chuàng)建 EventBridge 事件流。
使用您自己的阿里云賬號(hào)登錄阿里云控制臺(tái),然后訪問?EventBridge 控制臺(tái)。 [3] 注:第一次使用需開通。
單擊“事件流”列表,并在列表創(chuàng)建任務(wù) (資源地域?yàn)橥赜蚣纯?#xff0c;本次引導(dǎo)默認(rèn)選杭州)
創(chuàng)建事件流名稱為“test-amqp-mns2rabbitmq”,點(diǎn)擊下一步
指定事件源,事件提供方為“消息服務(wù) MNS”,隊(duì)列名稱為“test-mns-q”,點(diǎn)擊下一步
指定規(guī)則,規(guī)則部分可不做篩選,默認(rèn)匹配全部,直接點(diǎn)擊下一步
?注意:規(guī)則內(nèi)容可根據(jù)需求自行指定,為降低難度本次實(shí)驗(yàn)?zāi)J(rèn)投遞全部,更多詳情請(qǐng)查閱:
????https://help.aliyun.com/document_detail/181432.html????
服務(wù)類型選擇“消息隊(duì)列 RabbitMQ 版本”,具體配置如下,點(diǎn)擊創(chuàng)建
實(shí)例ID:選擇創(chuàng)建好的RabbitMQ ID Vhost:選擇“test-amqp-v” 目標(biāo)類型:選擇“Queue” Queue:選擇“test-amqp-q” Body:選擇“部分事件”,填寫“$.data” MessageId:選擇“常量”,填寫“0” Properties:選擇“部分事件”,填寫“$.source”?注意:消息內(nèi)容可根據(jù)需求自行指定,本次實(shí)驗(yàn)?zāi)J(rèn)投遞 data 字段,更多詳情請(qǐng)查閱:
????https://help.aliyun.com/document_detail/181429.html????
?
創(chuàng)建完成后,可點(diǎn)擊“啟動(dòng)”來啟動(dòng)事件流
5)驗(yàn)證路由任務(wù)
向 MNS Source ?“test-mns-q ” 發(fā)送實(shí)驗(yàn)消息
點(diǎn)擊下載?MNS SDK [4]
修改 sample.cfg
在 “sample.cfg ” 填寫 AccessKeyId,AccessKeySecret,Endpoint 等信息
AccessKeyId,AccessKeySecret 可在阿里云 RAM 控制臺(tái) [5] 創(chuàng)建
Endpoint 即步驟 1 , MNS 公網(wǎng)接入點(diǎn)地址
AccessKeyId = LTAI5t96yU2S2E84BYsNNQ33 AccessKeySecret = xxxxxxx Endpoint = http://1825725063814405.mns.cn-hangzhou.aliyuncs.com填完效果如下,保存
找到 sample 目錄的“sendmessage.py” 示例
將循環(huán)參數(shù)調(diào)整為 200,并保存 (可選)
保存并運(yùn)行 “python sendmessage.py test-mns-q”
python sendmessage.py test-mns-q在事件流控制臺(tái) [6] ,分別點(diǎn)開 “test-mns-q2”, “test-amqp-q” 查看詳情轉(zhuǎn)儲(chǔ)詳情。
注意:MNS Q 僅支持單訂閱,不支持廣播模式。故該測(cè)試需要將 MNS/RabbitMQ 兩個(gè)實(shí)驗(yàn),任選其一關(guān)停后進(jìn)行實(shí)驗(yàn)。
如需廣播模式,請(qǐng)創(chuàng)建 MNS Topic 資源。
A 鏈路實(shí)驗(yàn)結(jié)果:
B 鏈路實(shí)驗(yàn)結(jié)果:
優(yōu)勢(shì)及總結(jié)
EventBridge 事件流提供端到端的消息路由能力,通過簡(jiǎn)單配置即可完成消息分發(fā),消息同步,跨地域消息備份,跨產(chǎn)品消息同步等能力。具有運(yùn)維簡(jiǎn)單,成本低,效率高,使用穩(wěn)定等優(yōu)勢(shì)。同時(shí)使用 EventBridge 可以實(shí)現(xiàn)基礎(chǔ)的數(shù)據(jù)過濾,數(shù)據(jù)脫敏等數(shù)據(jù)處理類能力。是消息路由場(chǎng)景下運(yùn)維成本最低的解決方案。
相關(guān)鏈接
?[1] 消息隊(duì)列MNS版控制臺(tái)
https://mns.console.aliyun.com/accounttraceid=a42e9ca8e911475087856852d4526c4dsjeq
[2] 消息隊(duì)列RabbitMQ版控制臺(tái)
https://amqp.console.aliyun.com/
[3] EventBridge 控制臺(tái)
https://eventbridge.console.aliyun.com/overview
[4] 點(diǎn)擊下載 MNS SDK
https://aliware-images.oss-cn-hangzhou.aliyuncs.com/mns/sdk/python/aliyun-mns-python-sdk-1.1.6.zip?spm=a2c4g.11186623.0.0.516e7538twGvPp&file=aliyun-mns-python-sdk-1.1.6.zip
[5] 阿里云RAM 控制臺(tái)
https://ram.console.aliyun.com/manage/ak
[6] 事件流控制臺(tái)
(https://eventbridge.console.aliyun.com/cn-hangzhou/event-streamings)?
點(diǎn)擊文末 “ ??此處??? ”,進(jìn)入阿里云 EventBridge 官網(wǎng),了解更多詳情~ ?
總結(jié)
以上是生活随笔為你收集整理的EventBridge消息路由|高效构建消息路由能力的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 极速生成缩略图,Serverless 支
- 下一篇: 鉴机识变,面向未来|RocketMQ S