您可以使用事件总线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****" }