EventBridge 整合雲服務實踐

阿里巴巴雲原生發表於2022-04-21

作者:李凱(凱易)

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/vide...

1)首先建立一個 bucket,下面有一個 zip 目錄用於存放上傳的壓縮檔案,一個 unzip 目錄用於存放解壓後的檔案。

在這裡插入圖片描述

2) 部署解壓服務,並且暴露公網訪問的地址。

解壓服務的原始碼地址為:
https://github.com/AliyunCont...

也可以使用 ASK 直接部署,yaml 檔案地址為:
https://github.com/AliyunCont...

3)建立一個事件規則監聽 zip 目錄下的上傳檔案的事件,並投遞到解壓服務的 HTTP Endpoint。

在這裡插入圖片描述

這裡使用 subject,匹配 zip 目錄。

4)再建立一個事件規則監聽 unzip 目錄的事件,投遞解壓事件到釘釘群。

在這裡插入圖片描述

這裡同樣使用 subject,匹配 unzip 目錄。

對於變數和模板的配置可以參考官方文件 :
https://help.aliyun.com/docum...

EventBridge 會通過 JSONPath 的方式從事件中提取引數,然後把這些值放到變數中,最後通過模板的定義渲染出最終的輸出投遞到事件目標。OSS 事件源的事件格式也可以參考官方文件 :
https://help.aliyun.com/docum... ,並根據實際的業務需要使用 JSONPath 定義變數。5)最後,通過 oss 控制檯上傳一個檔案進行驗證。

在這裡插入圖片描述
在這裡插入圖片描述

可以看到剛剛上傳的 eventbridge.zip 已經解壓到並上傳上來了,也可以在釘釘群裡面,收到解壓完成的通知。此外,還可以在事件追蹤這邊檢視事件的內容已經投遞的軌跡。

在這裡插入圖片描述

可以看到有兩個上傳事件:一個是通過控制檯上傳的事件,一個是解壓檔案後上傳的事件。

在這裡插入圖片描述

可以檢視軌跡,都成功投遞到了解壓服務的 HTTP Endpoint 以及釘釘機器人。

以自定義事件源以及雲產品事件目標的方式整合雲產品

剛才演示的 demo 是整合雲服務的事件源,下面再通過一個 demo 看一下如何通過以自定義事件源以及雲產品事件目標的方式整合雲產品。

前往下方連結檢視視訊:
https://www.bilibili.com/vide...

這個 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/docum...

4) 點選下一步,選擇事件目標為資料庫,填寫資料庫資訊,配置轉化規則,完成建立。
在這裡插入圖片描述

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/vide...

• 首先建立一個事件流,選擇源 RocketMQ 例項,填寫 Tag 為 mns。

在這裡插入圖片描述
在這裡插入圖片描述

• 事件模式內容留空表示匹配所有。

在這裡插入圖片描述

• 目標選擇 MNS,選擇目標佇列完成建立。

在這裡插入圖片描述

• 完成建立之後,點選啟動,啟動事件流任務。

事件流啟動完成之後,我們就可以通過控制檯或者 SDK 傳送訊息到源 RocketMQ Topic 裡面。當有 Tag 為 mns 的時候,我們可以看見訊息路由到了 mns;當有 Tag 不為 mns 的時候,訊息就不會路由到 mns。

總結

本篇文章主要向大家分享了通過 EventBridge 如何整合雲產品事件源,如何整合雲產品事件目標以及通過事件流如何整合訊息產品,想要了解更多 EventBridge 相關資訊,掃描下方二維碼加入釘釘群~

在這裡插入圖片描述

點選此處,瞭解更多 EventBridge 相關資訊~作者:李凱(凱易)

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/vide...

1)首先建立一個 bucket,下面有一個 zip 目錄用於存放上傳的壓縮檔案,一個 unzip 目錄用於存放解壓後的檔案。

在這裡插入圖片描述

2) 部署解壓服務,並且暴露公網訪問的地址。

解壓服務的原始碼地址為:
https://github.com/AliyunCont...

也可以使用 ASK 直接部署,yaml 檔案地址為:
https://github.com/AliyunCont...

3)建立一個事件規則監聽 zip 目錄下的上傳檔案的事件,並投遞到解壓服務的 HTTP Endpoint。

在這裡插入圖片描述

這裡使用 subject,匹配 zip 目錄。

4)再建立一個事件規則監聽 unzip 目錄的事件,投遞解壓事件到釘釘群。

在這裡插入圖片描述

這裡同樣使用 subject,匹配 unzip 目錄。

對於變數和模板的配置可以參考官方文件 :
https://help.aliyun.com/docum...

EventBridge 會通過 JSONPath 的方式從事件中提取引數,然後把這些值放到變數中,最後通過模板的定義渲染出最終的輸出投遞到事件目標。OSS 事件源的事件格式也可以參考官方文件 :
https://help.aliyun.com/docum... ,並根據實際的業務需要使用 JSONPath 定義變數。5)最後,通過 oss 控制檯上傳一個檔案進行驗證。

在這裡插入圖片描述
在這裡插入圖片描述

可以看到剛剛上傳的 eventbridge.zip 已經解壓到並上傳上來了,也可以在釘釘群裡面,收到解壓完成的通知。此外,還可以在事件追蹤這邊檢視事件的內容已經投遞的軌跡。

在這裡插入圖片描述

可以看到有兩個上傳事件:一個是通過控制檯上傳的事件,一個是解壓檔案後上傳的事件。

在這裡插入圖片描述

可以檢視軌跡,都成功投遞到了解壓服務的 HTTP Endpoint 以及釘釘機器人。

以自定義事件源以及雲產品事件目標的方式整合雲產品

剛才演示的 demo 是整合雲服務的事件源,下面再通過一個 demo 看一下如何通過以自定義事件源以及雲產品事件目標的方式整合雲產品。

前往下方連結檢視視訊:
https://www.bilibili.com/vide...

這個 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/docum...

4) 點選下一步,選擇事件目標為資料庫,填寫資料庫資訊,配置轉化規則,完成建立。
在這裡插入圖片描述

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/vide...

• 首先建立一個事件流,選擇源 RocketMQ 例項,填寫 Tag 為 mns。

在這裡插入圖片描述
在這裡插入圖片描述

• 事件模式內容留空表示匹配所有。

在這裡插入圖片描述

• 目標選擇 MNS,選擇目標佇列完成建立。

在這裡插入圖片描述

• 完成建立之後,點選啟動,啟動事件流任務。

事件流啟動完成之後,我們就可以通過控制檯或者 SDK 傳送訊息到源 RocketMQ Topic 裡面。當有 Tag 為 mns 的時候,我們可以看見訊息路由到了 mns;當有 Tag 不為 mns 的時候,訊息就不會路由到 mns。

總結

本篇文章主要向大家分享了通過 EventBridge 如何整合雲產品事件源,如何整合雲產品事件目標以及通過事件流如何整合訊息產品,想要了解更多 EventBridge 相關資訊,掃描下方二維碼加入釘釘群~

在這裡插入圖片描述

點選此處,瞭解更多 EventBridge 相關資訊~

相關文章