作者:李凱(凱易)
EvenBridge 集成概述
EventBridge 是阿里云所推出了一款無服務器事件總線,其目標是拓展事件生態,打破系統間的資料孤島,建立事件集成生態,提供統一的事件標準化接入及管理能力,完善集成與被集成通路,幫助客戶快速實作事件驅動的核心原子功能,可將 EventBridge 快速集成至 BPM、RPA、CRM 等系統,
EventBridge 通過事件標準化,接入標準化,組件標準化三個方向作為支點拓展 EventBridge 事件生態:
- 事件標準化:擁抱 CloudEvents 1.0 開源社區標準協議,原生支持 CloudEvents 社區 SDK 和 API,全面擁抱開源社區事件標準生態;
- 接入標準化:提供標準事件推送協議 PutEvent,并支持 Pull 和 Push 兩種事件接入模型,可有效降低事件接入難度,提供云上完善的事件接入標準化流程;
- 組件標準化:封裝標準的事件下游組件工具鏈體系,包括 Schema 注冊、事件分析、事件檢索、事件儀表盤等,提供完善的事件工具鏈生態,
在集成領域 EventBridge 重點打造事件集成和資料集成兩類核心場景,下面將圍繞這兩類場景具體展開描述,
事件集成
目前 EventBridge 已經擁有 80+ 云產品的事件源,800+ 種事件型別,整個事件生態還正在逐步豐富中,
那么,EventBridge 如何實作云產品的事件集成呢?
- 首先在 EventBridge 控制臺可以看見一個名為 default 的事件總線,云產品的事件都會投遞到這個總線;
- 然后點擊創建規則,就可以選擇所關心的云產品以及它的相關事件進行事件的監聽和投遞,
下面以兩個例子為例,來看下 EventBridge 事件集成的方式,
OSS 事件集成
以 OSS 事件源為例,來講解一下如何集成 OSS 事件,
OSS 事件現在主要分為 4 類,操作審計相關、云監控相關、配置審計相關、以及云產品相關的事件例如 PutObject 上傳檔案等等,其他的云產品的事件源也類似,基本都可以分為這幾個型別的事件,
下面演示一下事件驅動的在線檔案解壓服務:
- 在 OSS Bucket 下面會有一個 zip 檔案夾存放需要解壓的檔案,一個 unzip 檔案夾存放解壓后的檔案;
- 當上傳檔案到 OSS Bucket 之后,會觸發檔案上傳的事件并投遞到 EventBridge 的云服務專用總線;
- 然后會使用一個事件規則過濾 zip 這個 bucket 的事件并投遞到解壓服務的 HTTP Endpoint;
- 解壓服務會在收到事件之后,根據事件里面的檔案路徑從 OSS 下載檔案解壓,并在解壓之后將檔案傳到 unzip 目錄下;
- 同時,還會有一個事件規則,監聽 unzip 目錄的檔案上傳事件,并將事件轉換后推送到釘釘群,
一起來看下是如何實作的:
前往下方鏈接查看視頻:
??https://www.bilibili.com/video/BV1s44y1g7dk/??
1)首先創建一個 bucket,下面有一個 zip 目錄用于存放上傳的壓縮檔案,一個 unzip 目錄用于存放解壓后的檔案,
- 部署解壓服務,并且暴露公網訪問的地址,
解壓服務的原始碼地址為:
??https://github.com/AliyunContainerService/serverless-k8s-examples/tree/master/oss-unzip?spm=a2c6h.12873639.article-detail.15.5a585d52apSWbk??
也可以使用 ASK 直接部署,yaml 檔案地址為:
??https://github.com/AliyunContainerService/serverless-k8s-examples/blob/master/oss-unzip/hack/oss-unzip.yaml??
3)創建一個事件規則監聽 zip 目錄下的上傳檔案的事件,并投遞到解壓服務的 HTTP Endpoint,
這里使用 subject,匹配 zip 目錄,
4)再創建一個事件規則監聽 unzip 目錄的事件,投遞解壓事件到釘釘群,
這里同樣使用 subject,匹配 unzip 目錄,
對于變數和模板的配置可以參考官方檔案 :
??https://help.aliyun.com/document_detail/181429.html??,
EventBridge 會通過 JSONPath 的方式從事件中提取引數,然后把這些值放到變數中,最后通過模板的定義渲染出最終的輸出投遞到事件目標,OSS 事件源的事件格式也可以參考官方檔案 :???https://help.aliyun.com/document_detail/205739.html#section-g8i-7p9-xpk??? **,并根據實際的業務需要使用 JSONPath 定義變數,5)最后,通過 oss 控制臺上傳一個檔案進行驗證,
可以看到剛剛上傳的 eventbridge.zip 已經解壓到并上傳上來了,也可以在釘釘群里面,收到解壓完成的通知,此外,還可以在事件追蹤這邊查看事件的內容已經投遞的軌跡,
可以看到有兩個上傳事件:一個是通過控制臺上傳的事件,一個是解壓檔案后上傳的事件,
可以查看軌跡,都成功投遞到了解壓服務的 HTTP Endpoint 以及釘釘機器人,
以自定義事件源以及云產品事件目標的方式集成云產品
剛才演示的 demo 是集成云服務的事件源,下面再通過一個 demo 看一下如何通過以自定義事件源以及云產品事件目標的方式集成云產品,
前往下方鏈接查看視頻:
??https://www.bilibili.com/video/BV1QF411M7xv/??
這個 demo 的最終效果是通過 EventBridge 自動進行資料的清洗,并投遞到 RDS 中去,事件內容是一個 JSON,擁有兩個欄位一個名字一個年齡,現在希望將把大于 10 歲的用戶過濾出來并存盤到 RDS 中,
整體的架構如圖所示,使用一個 MNS Queue 作為自定義事件源,并通過 EventBridge 過濾并轉換事件最終直接輸出到 RDS 中去,
1)首先已經創建好了一個 MNS Queue,創建好一個 RDS 實體以及資料庫表,表結構如下所示:
2)創建一個自定事件總線,選擇事件提供方為 MNS,佇列為提前創建好的佇列;
創建好了之后,我們就可以在事件源這里看見一個已經正在運行中的事件源;
3)接下來創建規則投遞到 RDS
配置的事件模式內容如下:
{
"source": [
"my.user"
],
"data": {
"messageBody": {
"age": [
{
"numeric": [
">",
10
]
}
]
}
}
}
數值匹配可以參考官方檔案:
??https://help.aliyun.com/document_detail/181432.html#section-dgh-5cq-w6c??
- 點擊下一步,選擇事件目標為資料庫,填寫資料庫資訊,配置轉化規則,完成創建,
5)最后,先用 MNS Queue 發送一個訊息,這個的 age 是大于 10 的,
可以看見這條事件就輸出到了 RDS 里面了,
下面再發一個小于 10 的訊息到 MNS Queue,
這條事件就被過濾掉了,沒有輸出到 RDS,
也可通過事件追蹤查看事件:
可以看到一條事件成功投遞到了 RDS,一條事件被過濾掉了,沒有進行投遞,
資料集成
事件流是 EventBridge 為資料集成提供的一個更為輕量化、實時的端到端的事件流試的通道,主要目標是將事件在兩個端點之間進行資料同步,同時提供過濾和轉換的功能,目前已經支持阿里云各訊息產品之間的事件流轉,
不同于事件總線模型,在事件流中,并不需要事件總線,其 1:1 的模型更加的輕量,直接到目標的方式也讓事件更加的實時;通過事件流,我們可以實作不同系統之間的協議轉換,資料同步,跨地域備份的能力,
下面將通過一個例子講解如何使用事件流,將 RocketMQ 的訊息路由到 MNS Queue,將兩個產品集成起來,
整體的結構如圖所示,通過EventBridge 將 RocketMQ 中 TAG 為 MNS 的訊息路由到 MNQ Queue,
一起看下怎么實作:
前往下方鏈接查看視頻:
??https://www.bilibili.com/video/BV1D44y1G7GK/??
- 首先創建一個事件流,選擇源 RocketMQ 實體,填寫 Tag 為 mns,
- 事件模式內容留空表示匹配所有,
- 目標選擇 MNS,選擇目標佇列完成創建,
- 完成創建之后,點擊啟動,啟動事件流任務,
事件流啟動完成之后,我們就可以通過控制臺或者 SDK 發送訊息到源 RocketMQ Topic 里面,當有 Tag 為 mns 的時候,我們可以看見訊息路由到了 mns;當有 Tag 不為 mns 的時候,訊息就不會路由到 mns,
總結
本篇文章主要向大家分享了通過 EventBridge 如何集成云產品事件源,如何集成云產品事件目標以及通過事件流如何集成訊息產品,想要了解更多 EventBridge 相關資訊,掃描下方二維碼加入釘釘群~
點擊??此處??,了解更多 EventBridge 相關資訊~
發布云原生技術最新資訊、匯集云原生技術最全內容,定期舉辦云原生活動、直播,阿里產品及用戶最佳實踐發布,與你并肩探索云原生技術點滴,分享你需要的云原生內容,
關注【阿里巴巴云原生】公眾號,獲取更多云原生實時資訊!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/463506.html
標籤:其他
