跳到主要內容
版本:5.0

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 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 來修改。記錄可用於檢查服務是否已正確啟動: img.png

  • 測試 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"
    }