事件总线EventBridge支持自定义事件总线,用于接收您自己的应用生产的事件。本教程以用户自建的客户关系管理(Customer Relation Management,CRM)系统为例,说明如何定义营销相关事件,将营销相关事件发布到事件总线EventBridge,然后利用事件规则过滤出需要关心的用户注册或登录事件,最终这些事件路由至指定的HTTP网关,从而实现事件驱动架构。

前提条件

注册阿里云账号并完成实名认证。详情请参见阿里云账号注册流程

背景信息

  • 事件驱动架构:以事件驱动架构设计和管理您的服务可以很好的实现服务模块之间解耦,提高服务整体的稳定性和灵活性。所有的业务数据都可以映射到事件上来,所有的业务事件按照业务领域的划分为多个事件类型。详情请参见事件驱动架构(Event Driven Architecture,EDA)
  • CRM系统:客户信息收集、管理、分析和利用的信息系统。该系统记录了企业在市场营销过程中和客户发生的各种交互行为,以及各类有关活动的状态。

用户CRM系统营销相关事件通知事件流

本文以用户自建的CRM系统为例,为您介绍自定义事件接入事件总线EventBridge的流程。

customflow

步骤一:定义用户CRM系统的营销相关事件

为使用统一的方式描述事件,事件总线EventBridge采用CloudEvents 1.0协议对事件的属性和数据进行描述。详情请参见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

您需要开通事件总线EventBridge

  1. 进入事件总线EventBridge开通页面。
  2. 事件总线EventBridge(按量付费)页面,选中事件总线EventBridge(按量付费)服务协议,然后单击立即购买
    activate_service

步骤三:创建事件总线marketing

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

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

步骤四:创建事件规则

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

  1. 登录事件总线EventBridge控制台
  2. 在顶部菜单栏,选择华东1(杭州)地域。
  3. 在左侧导航栏,单击规则
  4. 规则页面的规则区域,单击创建规则
  5. 创建规则页面,完成以下操作。
    1. 名称和描述区域的名称文本框,输入MyCustomRule,在描述文本框,输入将CRM系统的营销相关事件路由到指定HTTP网关。
      marketing_1
    2. 定义事件模式区域,选择自定义模式,在事件模式代码框,输入自定义应用的事件模式,然后单击保存
      marketing_3过滤出需要关心的用户注册或登录事件的事件模式示例如下。
      {
          "source": [
              "crmabc.newsletter"
          ],
          "type": [
              "UserSignUp", "UserLogin"
          ]
      }
    3. 选择事件总线区域,选择自定义事件总线,然后从自定义事件总线列表,选择marketing
      marketing
    4. 选择目标处理区域的目标列表,选择HTTP,在URL文本框,输入http://api.xtingke.com/eventBridge/processEvent,然后从推送格式列表,选择完整事件
      cvc_4
    5. 单击确定

步骤五:使用SDK发布事件

将CRM系统的营销相关事件发布到事件总线EventBridge的操作步骤如下:

  1. 添加Maven依赖。
    Maven依赖的示例代码如下。
    <dependencies>
      <dependency>
        <groupId>com.aliyun.eventbridge</groupId>
        <artifactId>eventbridge-client</artifactId>
        <version>1.0.1</version>
      </dependency>
    </dependencies>
  2. 发布消息。
    发布消息的示例代码如下。
    package com.aliyun.eventbridge.customer;
    
    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,在阿里云管理控制台的安全信息管理页面获取。
    accessSecret 阿里云账号的AccessKey Secret,在阿里云管理控制台的安全信息管理页面获取。
    endpoint 事件总线EventBridge服务接入点,在事件总线EventBridge控制台的接入点信息页面获取。

步骤六:使用HTTP网关接收事件

使用HTTP网关接收事件的示例代码如下。
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@SpringBootApplication
@Slf4j
public class EventProcessingApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @PostMapping("/eventBridge/processEvent")
    @ResponseBody
    public String revieveMessage(@RequestBody String data) {
        log.info("revieveEvent");
        log.info(data);
        return "recieved";
    }
}
接收到的事件如下图所示。marketing_4