您可以使用事件總線EventBridge的自定義事件總線接收您自定義的應用生產的事件,并將其路由至目標阿里云服務。本教程以客戶關系管理CRM(Customer Relation Management)系統為例,說明如何將營銷相關事件發布到事件總線EventBridge,然后利用事件規則過濾出需要關心的用戶注冊或登錄事件,并將其路由至輕量消息隊列(原 MNS)。
前提條件
您已完成以下操作:
背景信息
本文以CRM系統為例介紹自定義事件如何接入事件總線EventBridge,從而構造事件驅動架構。
CRM系統:客戶信息收集、管理、分析和利用的信息系統。該系統記錄了企業在市場營銷過程中和客戶發生的各種交互行為,以及各類有關活動的狀態。如需接入事件總線EventBridge,該CRM系統需要根據CloudEvents 1.0協議對營銷相關事件的屬性和數據進行描述。CRM系統的營銷相關事件定義示例如下:
名稱
示例值
描述
source
crmabc.newsletter
事件源。長度最大128字節。
type
UserSignUp, UserLogin
事件類型。長度最大64字節。取值:
UserPayOff:用戶支付。
UserLogin:用戶登錄。
UserSignUp:用戶注冊。
subject
crmabc/users/1234345
事件主題。長度最大128字節。
data
{ \"E-Mail\": \"${email}\" }
事件內容。自定義事件的事件附加數據。
事件驅動架構:以事件驅動架構設計和管理您的服務可以很好的實現服務模塊之間解耦,提高服務整體的穩定性和靈活性。所有的業務數據都可以映射到事件上來,所有的業務事件按照業務領域劃分為多個事件類型。更多信息,請參見事件驅動架構。
步驟一:快速創建自定義事件總線
- 登錄事件總線EventBridge控制臺。
- 在左側導航欄,單擊事件總線。
- 在頂部菜單欄,選擇地域。
在事件總線頁面的自定義事件總線區域,單擊快速創建。
在創建自定義事件總線配置向導面板,完成以下操作。
在總線(必填)面板,在自定義事件總線名稱文本框輸入marketing,在描述文本框輸入路由CRM系統的營銷相關事件,然后單擊下一步。
在事件源面板,在事件源名稱文本框輸入MyCustomSource,在描述文本框輸入生產CRM系統的營銷相關事件,事件提供方選擇自定義應用,然后單擊下一步。
在規則面板,在規則名稱文本框輸入MyCustomRule,在描述文本框輸入將CRM系統的營銷相關事件路由到輕量消息隊列(原 MNS)。,在模式內容代碼框輸入事件模式,然后單擊下一步。
過濾出用戶注冊或登錄事件的事件模式內容示例如下所示。
{ "source": [ "crmabc.newsletter" ], "type": [ "UserSignUp", "UserLogin" ] }
在目標面板,配置事件目標,然后單擊創建。
服務類型:單擊輕量消息隊列(原 MNS)。
隊列:選擇MyQueue。
消息內容:單擊完整事件。
步驟二:使用SDK發布事件
使用SDK將CRM系統的營銷相關事件發布到事件總線EventBridge。
添加Maven依賴。
Maven依賴的示例代碼如下:
<dependency> <groupId>com.aliyun</groupId> <artifactId>eventbridge-client</artifactId> <version>1.2.6</version> </dependency>
發布事件。
發布事件的示例代碼如下:
import java.net.URI; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.aliyun.eventbridge.EventBridge; import com.aliyun.eventbridge.EventBridgeClient; import com.aliyun.eventbridge.models.CloudEvent; import com.aliyun.eventbridge.models.Config; import com.aliyun.eventbridge.models.PutEventsResponse; import com.aliyun.eventbridge.util.EventBuilder; import com.google.gson.Gson; public class PutEventsSample { private final EventBridge eventBridgeClient; public PutEventsSample() { Config authConfig = new Config(); authConfig.accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); authConfig.accessKeySecret =System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); authConfig.endpoint = "{endpoint}"; eventBridgeClient = new EventBridgeClient(authConfig); } public void putEventsSample() { List<CloudEvent> cloudEventList = new ArrayList<CloudEvent>(); cloudEventList.add(EventBuilder.builder() .withId("9e9b433c-a89b-4918-896b-7e1b7221****") .withSource(URI.create("crmabc.newsletter")) .withType("UserSignUp") .withSubject("crmabc/users/1234345") .withTime(new Date()) .withJsonStringData("{ \"E-Mail\": \"${email}\" }") .withAliyunEventBus("marketing") .build()); PutEventsResponse putEventsResponse = eventBridgeClient.putEvents(cloudEventList); System.out.println(new Gson().toJson(putEventsResponse)); } public static void main(String[] args){ PutEventsSample sample = new PutEventsSample(); try { sample.putEventsSample(); } catch (Throwable e) { e.printStackTrace(); } } }
參數
描述
accessKeyId
阿里云賬號的AccessKey ID。
accessKeySecret
阿里云賬號的AccessKey Secret。
endpoint
事件總線EventBridge服務接入點。登錄事件總線EventBridge控制臺,在左側導航欄單擊事件總線,找到目標自定義事件總線,在最右側操作列單擊詳情,在總線概覽頁面的接入點區域獲取。
結果驗證
您可以在輕量消息隊列(原 MNS)控制臺確認是否接收到關注的營銷相關事件。
在左側導航欄,單擊隊列列表。
在頂部菜單欄,選擇地域。
在隊列列表頁面,找到目標隊列,在其右側操作列選擇 。
在隊列收發消息快速體驗頁面的接收消息區域,單擊接收消息。
接收到的示例消息內容如下所示。
{ "eventId":"9e9b433c-a89b-4918-896b-7e1b7221****", "publishTime":1591272433527, "Message":{ "data":"{ \"E-Mail\": \"${email}\" }", "id":"9e9b433c-a89b-4918-896b-7e1b7221****", "source":"crmabc.newsletter", "specversion":"1.0", "type":"UserSignUp", "subject":"crmabc/users/1234345", "time":"2020-06-04T12:07:11.851Z" }, "eventBusName":"marketing", "eventBusOwner":"<yourAccountId>", "ruleName":"MyCustomRule", "eventBusInvoker":"<yourAccountId>", "MessageMD5":"D0256972C35F85409E38D176B7E7****" }