RocketMQ EventBridge 快速入門
RocketMQ EventBridge 需要一個訊息服務來儲存事件,以及一個執行階段來訂閱和推送事件。在這種情況下,我們選擇 Apache RocketMQ 作為我們的訊息服務,並選擇 Apache RocketMQ Connect 作為我們的執行階段來訂閱和推送事件。當然,您也可以選擇其他訊息服務,EventBridge 沒有對此施加任何限制。未來,EventBridge 也計畫根據 OpenMessaging Connect API 實作自己的執行階段,以便更好地提供事件驅動服務。
系統需求
- 建議使用 64 位元作業系統,Linux/Unix/macOS
- 64 位元 JDK 1.8+
部署 Apache RocketMQ
Apache RocketMQ 是一個很棒的訊息服務,我們選擇它作為 EventBus 的預設儲存。您可以根據此手冊快速部署它:Apache RocketMQ 快速入門
部署 Apache RocketMQ Connect
我們使用 Apache RocketMQ Connect 作為我們的預設執行階段,以連線到外部上游和下游服務。您可以根據手冊完成部署:RocketMQ Connect 快速入門。在部署 Apache RocketMQ Connect 之前,您應該下載以下外掛程式,並將它們放在 rocketmq-connect 中「pluginPaths」組態參數所定義的目錄中。
- rocketmq-connect-eventbridge-jar-with-dependencies.jar
- rocketmq-connect-dingtalk-jar-with-dependencies.jar
- connect-cloudevent-transform-jar-with-dependencies.jar
- connect-filter-transform-jar-with-dependencies.jar
- connect-eventbridge-transform-jar-with-dependencies.jar
部署 RocketMQ EventBridge
下載 EventBridge
您可以從 這裡 下載 EventBridge 的二進制套件:rocketmq-eventbridge-xxx-bin-release.zip。下載後,將其解壓縮,您將獲得以下目錄
/rocketmq-eventbridge-xxx-bin-release/
|——bin
| |——runserver.sh
| |——eventbridge.sh
|——config
| |——application.properties
|——jar
| |——rocketmq-eventbridge.jar
設定 EventBridge
在執行之前,我們需要透過修改 config/application.properties 檔案來設定 EventBridge 的執行時間環境,如下所示:
# Mysql database address
spring.datasource.url=jdbc:mysql://xxxx:3306/xxxx?characterEncoding=utf8
spring.datasource.username=xxx
spring.datasource.password=xxxx
# RocketMQ nameserver address
rocketmq.namesrvAddr=xxxxx:9876
# RocketMQ cluster name
rocketmq.cluster.name=DefaultCluster
# RocketMQ Connect address
rocketmq.connect.endpoint=xxxxxx:8082
# log default configuration
log.path=~
log.level=INFO
app.name=rocketmq-eventbridge啟動 EventBridge
sh bin/eventbridge.sh start
預設的記錄目錄位於 ~ /rocketmq-eventbridge/rocketmq-eventbridge.log,可以透過變更 log.path 和 app.name 來修改。記錄可用於檢查服務是否已正確啟動:
測試 EventBridge
服務啟動後,我們可以使用以下的示範案例來測試和驗證 EventBridge。
示範
建立事件匯流排
POST /bus/createEventBus HTTP/1.1
Host: demo.eventbridge.com
Content-Type: application/json; charset=utf-8
{
"eventBusName":"demo-bus",
"description":"a demo bus."
}建立來源事件
POST /source/createEventSource HTTP/1.1
Host: demo.eventbridge.com
Content-Type: application/json; charset=utf-8
{
"eventBusName":"demo-bus",
"eventSourceName":"demo-source",
"description":"A demo source."
}建立事件規則
POST /rule/createEventRule HTTP/1.1
Host: demo.eventbridge.com
Content-Type: application/json; charset=utf-8
{
"eventBusName":"demo-bus",
"eventRuleName":"demo-rule",
"description":"A demo rule.",
"filterPattern":"{}"
}建立事件目標
建立一個將事件傳遞至雲端 EventBridge 的事件目標。
POST /target/createEventTargets HTTP/1.1
Host: demo.eventbridge.com
Content-Type: application/json; charset=utf-8
{
"eventBusName":"demo-bus",
"eventRuleName":"demo-rule",
"eventTargets":[
{
"eventTargetName":"eventbridge-target",
"className":"acs.eventbridge",
"config":{
"RegionId":"cn-hangzhou",
"AliyunEventBus":"rocketmq-eventbridge"
}
}
]
}建立一個將通知傳遞至釘釘機器人的事件目標:
POST /target/createEventTargets HTTP/1.1
Host: demo.eventbridge.com
Content-Type: application/json; charset=utf-8
{
"eventBusName":"demo-bus",
"eventRuleName":"demo-rule",
"eventTargets":[
{
"eventTargetName":"dingtalk-target",
"className":"acs.dingtalk",
"config":{
"WebHook":"https://oapi.dingtalk.com/robot/send?access_token=b43a54b702314415c2acdae97eda1e092528b7a9dddb31510a5b4430be2ef867",
"SecretKey":"SEC53483bf496b8f9e0b4ab0ab669d422208e6ccfaedfd5120ea6b8426b9ecd47aa",
"Body":"{\"template\":\"{\\\"text\\\":{\\\"content\\\":\\\"${content}\\\"},\\\"msgtype\\\":\\\"text\\\"}\",\"form\":\"TEMPLATE\",\"value\":\"{\\\"content\\\":\\\"$.data.body\\\"}\"}"
}
}
]
}將事件傳送至 EventBus
最後,我們將透過 API 傳送一個事件,並驗證目標端點是否如預期收到對應的事件。
POST /putEvents HTTP/1.1
Host: demo.eventbridge.com
Content-Type:"application/cloudevents+json; charset=UTF-8"
{
"specversion" : "1.0",
"type" : "com.github.pull_request.opened",
"source" : "https://github.com/cloudevents/spec/pull",
"subject" : "123",
"id" : "A234-1234-1234",
"time" : "2018-04-05T17:31:00Z",
"datacontenttype" : "application/json",
"data" : {
"body":"demo"
},
"aliyuneventbusname":"demo-bus"
}