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

步骤一:创建自定义事件源

  1. 登录事件总线EventBridge控制台
  2. 在左侧导航栏,选择事件驱动 > 事件源
  3. 在顶部菜单栏,选择地域。
  4. 事件源页面,单击自定义事件源页签,然后在快速添加自定义事件源区域单击自定义应用
  5. 添加自定义事件源面板,名称输入MyCustomSource描述输入生产CRM系统的营销相关事件,选择事件提供方为自定义应用,单击创建新的自定义总线,在自定义总线文本框中marketing,然后单击确定

步骤二:创建事件规则

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

步骤三:使用SDK发布事件

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

  1. 添加Maven依赖。
    Maven依赖的示例代码如下:
    <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>eventbridge-client</artifactId>
          <version>1.2.6</version>
    </dependency>
  2. 发布事件。
    发布事件的示例代码如下:
    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 = "{accessKeyId}";
            authConfig.accessKeySecret = "{accessKeySecret}";
            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控制台确认是否接收到关注的营销相关事件。

  1. 登录消息服务MNS控制台
  2. 在左侧导航栏,单击队列列表
  3. 在顶部菜单栏,选择地域。
  4. 队列列表页面,在名称列找到目标队列MyQueue,在其右侧操作列选择更多 > 收发消息
  5. 队列收发消息快速体验页面的接收消息区域,单击接收消息
    接收到的示例消息内容如下所示。
    {
        "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****"
    }