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

步骤一:创建自定义总线

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

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

步骤二:创建事件规则

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

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

步骤三:使用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服务接入点,在控制台的自定义总线页面右上角单击查看接入点获取。

结果验证

您可以在消息服务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****"
    }