您可以使用事件总线EventBridge的自定义事件总线接收您自己的应用生产的事件,并将其路由至目标阿里云服务。本教程以客户关系管理CRM(Customer Relation Management)系统为例,说明如何将营销相关事件发布到事件总线EventBridge,然后利用事件规则过滤出需要关心的用户注册或登录事件,并将其路由至消息服务MNS的队列。

前提条件

  1. 开通EventBridge服务。详情请参见开通服务
  2. 开通MNS服务。详情请参见开通MNS服务
  3. 创建队列。详情请参见创建队列

背景信息

本文以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}\" } 自定义事件的事件附加数据。
  • 事件驱动架构:以事件驱动架构设计和管理您的服务可以很好的实现服务模块之间解耦,提高服务整体的稳定性和灵活性。所有的业务数据都可以映射到事件上来,所有的业务事件按照业务领域划分为多个事件类型。详情请参见事件驱动架构(Event Driven Architecture,EDA)

视频教程

步骤一:创建事件总线

创建事件总线marketing,用于接收CRM系统的营销相关事件。

  1. 登录事件总线EventBridge控制台
  2. 在顶部菜单栏,选择地域。
  3. 在左侧导航栏,单击总线
  4. 总线页面的自定义事件总线区域,单击创建事件总线
  5. 创建事件总线面板,在名称文本框输入marketing,在描述文本框输入用于接收CRM系统的营销相关事件。,然后单击确定

步骤二:使用SDK发布事件

使用SDK将CRM系统的营销相关事件发布到事件总线EventBridge

  1. 添加Maven依赖。
    Maven依赖的示例代码如下:
    <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>eventbridge-client</artifactId>
          <version>1.2.2</version>
    </dependency>
  2. 发布消息。
    发布消息的示例代码如下:
    import com.aliyun.eventbridge.client.EventBridgeClient;
    import com.aliyun.eventbridge.core.event.AliyunExtBuilder;
    import com.aliyun.eventbridge.core.event.EventBuilder;
    import com.aliyun.eventbridge.core.event.EventImpl;
    import com.aliyun.eventbridge.core.model.request.DefaultPutEventsRequest;
    import com.aliyun.eventbridge.core.model.request.PutEventsRequest;
    import com.aliyun.eventbridge.core.model.request.PutEventsResponse;
    
    import java.net.URI;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.List;
    import java.util.UUID;
    
    public class AliyunCustomerPutEventsSample {
    
        private EventBridgeClient eventBridgeClient;
    
        public AliyunCustomerPutEventsSample() {
            this.eventBridgeClient = new EventBridgeClient(
                "endpoint", 
                "accessKeyId", 
                "accessKeySecret"
            );
        }
    
        public void shutdown() {    
            if (this.eventBridgeClient != null) {        
                this.eventBridgeClient.close();    
            }
        }
    
        public void putEventsSample() {
            try {
             List<EventImpl> cloudEvents = Arrays.asList(
                     EventBuilder.builder()
                             .withId(UUID.randomUUID().toString())
                             .withSource(URI.create("crmabc.newsletter"))
                             .withType("UserSignUp")
                             .withTime(new Date())
                             .withSubject("crmabc/users/1234345")
                             .withData("{ \"E-Mail\": \"${email}\" }")
                             .build()
             );
    
                PutEventsRequest request = new DefaultPutEventsRequest();
                request.addEvents(cloudEvents);
                request.setEventBusName("marketing");
    
                PutEventsResponse response = eventBridgeClient.putEvents(request);
                System.out.println(response);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main( String[] args ) {
            System.out.println( "Sample for Custom putEvents operation!");
            AliyunCustomerPutEventsSample sample = new AliyunCustomerPutEventsSample();
            try {
                sample.putEventsSample();
            } catch (Throwable e) {
                e.printStackTrace();
            } finally {
                sample.shutdown();
            }
        }
    }
    参数 描述
    accessKey 阿里云账号的AccessKey ID。
    accessKeySecret 阿里云账号的AccessKey Secret。
    endpoint 事件总线EventBridge服务接入点,在事件总线EventBridge控制台的接入点信息页面获取。

步骤三:创建事件规则

创建事件规则过滤并路由您关心的营销相关事件。

  1. 登录事件总线EventBridge控制台
  2. 在顶部菜单栏,选择地域。
  3. 在左侧导航栏,单击规则
  4. 规则页面的选择事件总线区域,从事件总线列表中选择marketing
  5. 规则页面的规则列表区域,单击创建规则
  6. 创建事件规则面板,完成以下操作。
    1. 名称和描述区域,在名称文本框输入MyCustomRule,在描述文本框输入将CRM系统的营销相关事件路由到消息服务MNS。
    2. 定义事件模式区域,单击自定义模式,在事件模式代码框,输入自定义应用的事件模式。
      marketing_3过滤出需要关心的用户注册或登录事件的事件模式示例如下所示。
      {
          "source": [
              "crmabc.newsletter"
          ],
          "type": [
              "UserSignUp", "UserLogin"
          ]
      }
    3. 选择事件总线区域,选择自定义事件总线,然后从自定义事件总线列表,选择marketing
    4. 选择目标服务区域,从目标服务类型列表选择消息服务,从队列列表选择MyQueue,在消息内容下方单击完整事件
    5. 单击确定

结果验证

您可以在消息服务MNS控制台确认是否接收到关心的营销相关事件。

  1. 登录消息服务MNS控制台
  2. 在顶部菜单栏,选择地域。
  3. 在左侧导航栏,单击队列
  4. 队列页面,在队列名称列找到目标队列,在其右侧操作列,单击接收消息
  5. 接收消息对话框,清空Base64解码,然后单击接收消息
    receive
    接收到的消息内容示例如下:
    {
        "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****"
    }