本文介绍如何通过函数计算控制台完成消息服务MNS主题触发器(以下简称MNS主题触发器)的配置,包括创建触发器、编写函数和测试函数。

前提条件

创建触发器

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

    强烈建议MNS主题和函数计算的函数部署在相同的地域,否则会增加网络延时。

    西南1(成都)
    主题 在列表中选择已创建的Topic。 Mytopic
    过滤标签 填写消息过滤标签。

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

    tag
    Event格式 选择Event格式。取值:
    • STREAM
    • JSON
    JSON
    重试策略 选择重试策略。取值:
    • 退避重试
    • 指数衰减

    如何选择重试策略,请参见NotifyStrategy

    退避重试
    角色名称 选择AliyunMNSNotificationRole
    说明 如果您第一次创建该类型的触发器,则需要在单击确定后,在弹出的对话框中选择立即授权
    AliyunMNSNotificationRole

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

    trigger-mns

编写函数

完成MNS主题触发器创建后,您可以开始编写函数代码。

在函数详情页面,单击函数代码页签,在代码编辑器中编写代码。
本文以Python函数代码为例。以下示例代码可以作为MNS主题触发器的函数模板。
import json
import logging

def handler(event, context):
  logger = logging.getLogger()
  logger.info("mns_topic trigger event = {}".format(event))
  # 例如,将事件记录到表格存储。
  return "OK"                     

测试函数

完成函数编写后,您需要调试函数以验证代码的正确性。

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

    发布在MNS主题上的消息根据notifyContentFormat进行处理,即入口函数的event。更多信息,请参见NotifyContentFormat

    • 创建触发器时,若event格式设置为STREAM
      • 当消息中不含消息属性(MessageAttributes)时,event格式如下。

        说明 当消息中不含消息属性(MessageAttributes)时,event的内容格式为JSON字符串。
        # 消息正文。
        'hello topic'
      • 当消息中含有消息属性(MessageAttributes)时,event格式如下。

        说明 event的内容中包含MessageAttributes相关的键值对。更多信息,请参见PublishMessage
            {
                "body": "hello topic",
                "attrs": {
                    "Extend": "{\\"key\\":\\"value\\"}"
                }
            }                    
    • 创建触发器时,若event格式设置为JSON
      • 当消息中不含消息属性(MessageAttributes)时,event格式如下。

            {
                "TopicOwner": "118620210433****",
                "Message": "hello topic",
                "Subscriber": "118620210433****",
                "PublishTime": 1550216480040,
                "SubscriptionName": "test-fc-subscribe",
                "MessageMD5": "BA4BA9B48AC81F0F9C66F6C909C3****",
                "TopicName": "Mytopic",
                "MessageId": "2F5B3C082B923D4EAC694B76D928****"
            }        
                                    
      • 当消息中含有消息属性(MessageAttributes)时,event格式如下。

        说明 event的内容中包含MessageAttributes相关的键值对。更多信息,请参见PublishMessage
            {
                "key": "value",
                "TopicOwner": "118620210433****",
                "Message": "hello topic",
                "Subscriber": "118620210433****",
                "PublishTime": 1550216302888,
                "SubscriptionName": "test-fc-subscribe",
                "MessageMD5": "BA4BA9B48AC81F0F9C66F6C909C3****",
                "TopicName": "Mytopic",
                "MessageId": "2F5B3C281B283D4EAC694B742528****"
            }
                                    
    event中涉及的参数解释如下表所示。
    参数 类型 示例值 描述
    key String value 消息属性相关的键值对。
    TopicOwner String 118620210433**** 订阅Topic的AccountId。
    Message String hello topic 消息内容。
    Subscriber String 118620210433**** 用户的AccountId。
    PublishTime Map 1550216302888 消息发布时间。
    SubscriptionName String test-fc-subscribe 订阅的名称。
    MessageMD5 String BA4BA9B48AC81F0F9C66F6C909C3**** 消息正文的MD5值。
    TopicName String Mytopic Topic名称。
    MessageId String 2F5B3C281B283D4EAC694B742528**** 消息的编号。
  3. 在函数详情页面,单击函数代码页签,然后单击测试函数

更多信息

除了函数计算控制台,您还可通过以下方式配置触发器:
  • 通过Serverless Devs工具配置触发器。更多操作,请参见Serverless Devs
  • 通过SDK配置触发器。更多操作,请参见SDK列表

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