消息队列RocketMQ版作为事件源通过事件总线EventBridge函数计算集成后,通过消息队列RocketMQ版触发器(以下简称RocketMQ触发器)能够触发关联函数执行,通过函数可以对发布到消息队列RocketMQ版中的消息进行自定义处理。本文介绍如何在函数计算控制台创建RocketMQ触发器、编写函数和测试函数。

功能简介

您在函数计算的控制台提交触发器创建请求之后,函数计算根据触发器的配置信息,将自动创建如下与事件总线EventBridge相关的资源:
  • 事件总线RocketMQ-函数名称-触发器名称
  • 事件源RocketMQ-函数名称-触发器名称
  • 事件规则服务名称-函数名称-触发器名称
创建完成后,您可以在函数计算控制台查看触发器信息,同时也可以在事件总线EventBridge控制台查看自动创建的资源信息。当事件源指定类型的事件投递到事件总线时,将触发该触发器关联的函数执行一次。
说明 自动创建的事件总线EventBridge相关资源的名称必须符合名称取值限制和要求,否则触发器无法创建成功。具体信息,请参见使用限制

注意事项

  • 事件总线EventBridge限制同一地域下自定义事件总线不能超过10个,每个自定义总线上创建的事件规则总数也不能超过10个。超过以上限制后,将无法再创建EventBridge触发器。
  • 创建的消息队列RocketMQ版的实例和函数计算的函数必须在相同的地域。
  • RocketMQ触发器暂时不支持通过Serverless Devs工具或SDK创建。

前提条件

步骤一:创建触发器

  1. 登录函数计算控制台
  2. 在左侧导航栏,单击服务及函数
  3. 在顶部菜单栏,选择地域。
  4. 服务列表页面,找到目标服务,在其右侧操作列单击函数管理
  5. 函数管理页面,单击目标函数名称。
    hanshuguanli
  6. 在函数详情页面,单击触发器管理页签,从版本或别名下拉列表选择要创建触发器的版本或别名,然后单击创建触发器
    创建触发器
  7. 在创建触发器面板,填写相关信息。然后单击确定
    创建触发器面板
    参数 操作 本文示例
    触发器类型 选择消息队列 RocketMQ 版 消息队列RocketMQ版
    名称 填写自定义的触发器名称。 rocketmq-trigger
    版本或别名 默认值为LATEST,如果您需要创建其他版本或别名的触发器,首先您需要在函数详情页的右上角切换到该版本或别名。关于版本的简介,请参见版本简介 LATEST
    RocketMQ 实例 选择已创建的消息队列RocketMQ版的实例。 MQ_INST_164901546557****_BXhFHryi
    Topic 选择已创建的消息队列RocketMQ版实例的Topic。 Mytopic
    过滤标签 填写消息过滤标签。

    只有收到包含此处设置的过滤标签字符串的消息时,才会触发函数执行。

    tag
    Group ID 选择已创建的消息队列RocketMQ版实例的Group ID。 GID_group1
    消费位点 选择消息的消费位点,即消息队列RocketMQ版从事件总线开始拉取消息的位置。取值说明如下:
    • 最新位点:从最新位点开始消费。
    • 最早位点:从最早位点开始消费。
    • 指定时间戳:从指定时间戳开始消费。
    最新位点

    创建完成后,在触发器名称列表中显示已创建的触发器。

    rocketmq-trigger

步骤二:编写函数

完成创建RocketMQ触发器之后,您可以编写函数代码。

在函数详情页面,单击函数代码页签,在代码编辑器中编写代码。

代码示例如下。

'use strict';
/*
To enable the initializer feature
please implement the initializer function as below:
exports.initializer = (context, callback) => {
  console.log('initializing');
  callback(null, '');
};
*/
exports.handler = (event, context, callback) => {
  console.log("event: %s", event);
  handle_event(event);
  callback(null, 'return result');
}

步骤三:测试函数

完成函数编写后,您需要调试函数以验证代码的正确性。在实际操作过程中,当消息队列RocketMQ版事件通过事件总线EventBridge投递到函数计算时,会自动触发函数执行。

消息队列RocketMQ版事件源会以event的形式作为输入参数传递给函数,您可以手动将event传给函数模拟触发事件,测试函数代码是否正确。

  1. 在函数详情页面,单击函数代码页签,然后单击xialatubiao图标,从下拉列表中,选择配置测试参数
  2. 配置测试参数对话框,选择创建新测试事件编辑已有测试事件页签,填写事件名称和事件内容。然后单击确定

    event是函数计算的入口参数,具体格式如下所示。

    {
        "id":"94ebc15f-f0db-4bbe-acce-56fb72fb****",
        "source":"RocketMQ-Function-rocketmq-trigger",
        "specversion":"1.0",
        "type":"mq:Topic:SendMessage",
        "datacontenttype":"application/json; charset=utf-8",
        "subject":"acs:mq:cn-hangzhou:164901546557****:MQ_INST_164901546557****_BXhFHryi%TopicName",
        "time":"2021-04-08T06:01:20.766Z",
        "aliyunaccountid":"164901546557****",
        "aliyunpublishtime":"2021-10-15T02:05:16.791Z",
        "aliyunoriginalaccountid":"164901546557****",
        "aliyuneventbusname":"RocketMQ-Function-rocketmq-trigger",
        "aliyunregionid":"cn-chengdu",
        "aliyunpublishaddr":"42.120.XX.XX",
        "data":{
            "topic":"TopicName",
            "systemProperties":{
                "MIN_OFFSET":"0",
                "TRACE_ON":"true",
                "MAX_OFFSET":"8",
                "MSG_REGION":"cn-hangzhou",
                "KEYS":"systemProperties.KEYS",
                "CONSUME_START_TIME":1628577790396,
                "TAGS":"systemProperties.TAGS",
                "INSTANCE_ID":"MQ_INST_164901546557****_BXhFHryi"
            },
            "userProperties":{
    
            },
            "body":"TEST"
        }
    }     
    data字段包含的参数解释如下表所示。关于CloudEvents规范中定义的参数解释,请参见事件概述
    参数 类型 示例值 描述
    topic String TopicName Topic名称。
    systemProperties Map 系统属性。
    MIN_OFFSET Int 0 最低位点。
    TRACE_ON Boolean true 是否有消息轨迹。取值说明如下:
    • true:有消息轨迹。
    • false:无消息轨迹。
    MAX_OFFSET Int 8 最高位点。
    MSG_REGION String cn-hangzhou 发送消息的地域。
    KEYS String systemProperties.KEYS 过滤属性。
    CONSUME_START_TIME Long 1628577790396 开始消费时间。单位:毫秒。
    UNIQ_KEY String AC14C305069E1B28CDFA3181CDA2**** 消息唯一键。
    TAGS String systemProperties.TAGS 过滤属性。
    INSTANCE_ID String MQ_INST_123456789098****_BXhFHryi 实例ID。
    userProperties Map 用户属性。
    body String TEST 消息内容。
  3. 在函数详情页面,单击函数代码页签,然后单击测试函数

验证结果

函数代码页签,您可以看到执行成功的指示。

result

更多信息

如需对创建的触发器进行修改或删除,具体操作,请参见触发器管理