您可以通过事件规则过滤事件,将事件路由到消息服务MNS的队列。本文以自定义事件为例介绍将事件路由到消息服务的前提条件、操作步骤和结果验证。

前提条件

步骤一:添加自定义事件源

  1. 登录事件总线EventBridge控制台
  2. 在左侧导航栏,单击事件总线
  3. 在顶部菜单栏,选择地域。
  4. 事件总线页面,单击目标总线名称。
  5. 在左侧导航栏,单击事件源
  6. 事件源页面,单击添加事件源
  7. 添加自定义事件源面板,输入名称描述事件提供方选择自定义应用,然后单击确定

步骤二:创建事件规则

注意 目标服务和事件规则必须处于同一地域。
  1. 登录事件总线EventBridge控制台
  2. 在左侧导航栏,单击事件总线
  3. 在顶部菜单栏,选择地域。
  4. 事件总线页面,单击目标总线名称。
  5. 在左侧导航栏,单击事件规则
  6. 事件规则页面,单击创建规则
  7. 创建规则页面,完成以下操作。
    1. 配置基本信息配置向导,在名称文本框输入规则名称,在描述文本框输入规则的描述,然后单击下一步
    2. 配置事件模式配置向导,事件源类型选择自定义事件源事件源选择步骤一添加的自定义事件源,在事件模式内容代码框输入事件模式,然后单击下一步

      如需了解更多信息,请参见事件模式

    3. 配置事件目标配置向导,配置事件目标,然后单击创建
      说明 1个事件规则最多可以添加5个目标。
      • 服务类型:单击消息服务
      • 队列:选择已创建的队列。
      • 消息内容:单击模板

        以下提供变量和模板的示例。

        变量示例:

        {
          "source":"$.source"
        }

        模板示例:

        The event comes from ${source} is abnormal.

        如需了解更多信息,请参见事件内容转换

步骤三:发布事件

  1. 登录事件总线EventBridge控制台
  2. 在左侧导航栏,单击事件总线
  3. 在顶部菜单栏,选择地域。
  4. 事件总线页面,找到目标总线,在其右侧操作列单击发布事件
    说明 仅自定义事件总线支持通过控制台发布事件。
  5. 发布事件至自定义事件总线面板,自定义事件源下拉列表选择已创建的自定义事件源,在事件体代码框输入事件内容,然后单击确定
    事件包含的参数规范,请参见事件概述

结果验证

您可以在消息服务MNS控制台确认是否接收到事件。

  1. 登录消息服务MNS控制台
  2. 在左侧导航栏,单击队列列表
  3. 在顶部菜单栏,选择地域。
  4. 队列列表页面,找到目标队列,在其右侧操作列选择更多 > 收发消息
  5. 队列收发消息快速体验页面的接收消息区域,单击接收消息
    注意 通过消息服务MNS的Java SDK接收投递过来的事件时,由于消息的Body没有经过Base64编码,会导致接收到的消息为乱码。因此,需要使用getMessageBodyAsRawBytes或者getMessageBodyAsRawString来获取事件的Body。

    接收到的示例消息内容如下所示。

    {
        "id":"22h0iaji-8cf5-2iea-j4a6-i99a5j1a****",
        "source":"acs.oss",
        "specversion":"1.0",
        "type":"oss:ObjectCreated:PostObject",
        "datacontenttype":"application/json;charset=utf-8",
        "dataschema":"http://example.com/item.json",
        "subject":"acs:oss:cn-hangzhou:<yourAccountId>:xls-papk/game_apk/123.jpg",
        "aliyunaccountid":"165228866041****",
        "aliyunpublishtime":"2020-10-14T17:00:03.628Asia/Shanghai",
        "aliyuneventbusname":"MyEventBus",
        "aliyunpublishaddr":"10.0.XX.XX",
        "data":{
            "name":"Eventbridge",
            "number":100
        }
    }