本示例为您展示了 python runtime 的 消息服务MNS 队列模型触发器示例。 本示例使用了 MNS 的队列模型作为示例,与示例 python3-mns-queue-producer 一起实现了消息服务的生产者-消费者模型。 MNS的配置在函数的环境变量配置中(参考s.yaml)。
- 一个可用的mns队列,可参考MNS官方文档队列模型快速入门-创建队列 创建。
- 开通事件总线EventBridge并授权
- 有 MNS 权限的 RAM 用户
- 建议直接使用函数计算默认的角色 AliyunFCDefaultRole
- 也可参考MNS官方文档开通消息服务MNS并授权,函数计算需要该RAM密钥访问MNS队列。
- [可选] 安装并配置 Serverless Devs 工具。(https://help.aliyun.com/document_detail/195474.html)
# 打包文件
cd code && zip -r python3-mns-queue-trigger.zip *选择服务(或创建服务)后,单击创建函数
- 选择
从零开始创建 - 填入函数名称
- 选择运行环境 Python 3.6/3.9
- 选择函数触发方式:通过事件请求触发
- 其他设置使用默认
详细创建函数流程见文档: 使用控制台创建函数
- 3.1 Json类型的测试事件
{
"id":"c2g71017-6f65-fhcf-a814-a396fc8d****",
"source":"MNS-Function-mnstrigger",
"specversion":"1.0",
"type":"mns:Queue:SendMessage",
"datacontenttype":"application/json; charset=utf-8",
"subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus",
"time":"2021-04-08T06:28:17.093Z",
"aliyunaccountid":"16490154********",
"aliyunpublishtime":"2021-10-15T07:06:34.028Z",
"aliyunoriginalaccountid":"164901546557****",
"aliyuneventbusname":"MNS-Function-mnstrigger",
"aliyunregionid":"cn-chengdu",
"aliyunpublishaddr":"42.120.XX.XX",
"data":{
"requestId":"606EA3074344430D4C81****",
"messageId":"C6DB60D1574661357FA227277445****",
"messageBody":"TEST"
}
}测试返回结果如下所示:
mns_queue trigger event = b'{\n "id":"c2g71017-6f65-fhcf-a814-a396fc8d****",\n "source":"MNS-Function-mnstrigger",\n "specversion":"1.0",\n "type":"mns:Queue:SendMessage",\n "datacontenttype":"application/json; charset=utf-8",\n "subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus",\n "time":"2021-04-08T06:28:17.093Z",\n "aliyunaccountid":"16490154********",\n "aliyunpublishtime":"2021-10-15T07:06:34.028Z",\n "aliyunoriginalaccountid":"164901546557****",\n "aliyuneventbusname":"MNS-Function-mnstrigger",\n "aliyunregionid":"cn-chengdu",\n "aliyunpublishaddr":"42.120.XX.XX",\n "data":{\n "requestId":"606EA3074344430D4C81****",\n "messageId":"C6DB60D1574661357FA227277445****",\n "messageBody":"TEST"\n }\n}'返回日志如下所示
2022-07-21 19:03:18FunctionCompute python3 runtime inited.
2022-07-21 19:03:18FC Invoke Start RequestId: d39d5414-fb38-44cf-a371-de73********
2022-07-21 19:03:182022-07-21 19:03:18 d39d5414-fb38-44cf-a371-de73******** [INFO] b'{\n "id":"c2g71017-6f65-fhcf-a814-a396fc8d****",\n "source":"MNS-Function-mnstrigger",\n "specversion":"1.0",\n "type":"mns:Queue:SendMessage",\n "datacontenttype":"application/json; charset=utf-8",\n "subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus",\n "time":"2021-04-08T06:28:17.093Z",\n "aliyunaccountid":"16490154********",\n "aliyunpublishtime":"2021-10-15T07:06:34.028Z",\n "aliyunoriginalaccountid":"164901546557****",\n "aliyuneventbusname":"MNS-Function-mnstrigger",\n "aliyunregionid":"cn-chengdu",\n "aliyunpublishaddr":"42.120.XX.XX",\n "data":{\n "requestId":"606EA3074344430D4C81****",\n "messageId":"C6DB60D1574661357FA227277445****",\n "messageBody":"TEST"\n }\n}'
2022-07-21 19:03:18FC Invoke End RequestId: d39d5414-fb38-44cf-a371-de73********- 3.2 Stream类型的测试事件
mock mns message测试返回结果如下所示:
mns_queue trigger event = b'mock mns message'返回日志如下所示
2022-07-21 19:07:42FC Invoke Start RequestId: b89fcd08-e684-4fa2-bb80-8305********
2022-07-21 19:07:422022-07-21 19:07:42 b89fcd08-e684-4fa2-bb80-8305******** [INFO] b'mock mns message'
2022-07-21 19:07:42FC Invoke End RequestId: b89fcd08-e684-4fa2-bb80-8305********选择 queue 模型 MNS 触发器
测试返回结果如下所示:
mns_topic trigger event = b'{"id":"0FFF111D2A6B444B7FE46AE2xxxxxxxx","source":"MNS-python3-mns-queue-trigger-trigger-5h3jxxxx","specversion":"1.0","type":"mns:Queue:SendMessage","datacontenttype":"application/json;charset=utf-8","subject":"acs:mns:cn-shenzhen:15812231xxxxxxxx:queues/fc-example","time":"2022-07-21T10:07:31.525Z","aliyunaccountid":"15812231xxxxxxxx","aliyunpublishtime":"2022-07-21T10:07:32.019Z","aliyunoriginalaccountid":"15812231xxxxxxxx","aliyuneventbusname":"MNS-python3-mns-queue-trigger-trigger-5h3jxxxx","aliyunregionid":"cn-shenzhen","aliyunpublishaddr":"10.58.xx.xx","data":{"requestId":"62D92563354133CAxxxxxxxx","messageId":"0FFF111D2A6B444B7FE46AE2xxxxxxxx","messageBody":"bWVlc2FnZSBmcm9tIE1OUyBjb25zb2xl"}}'在函数计算控制台查看请求日志,如下所示:
2022-07-21 18:07:32FunctionCompute python3 runtime inited.
2022-07-21 18:07:32FC Invoke Start RequestId: 0FFF111D2A6B444B7FE46AE2xxxxxxxx
2022-07-21 18:07:322022-07-21 18:07:32 0FFF111D2A6B444B7FE46AE2xxxxxxxx [INFO] b'{"id":"0FFF111D2A6B444B7FE46AE2xxxxxxxx","source":"MNS-python3-mns-queue-trigger-trigger-5h3jxxxx","specversion":"1.0","type":"mns:Queue:SendMessage","datacontenttype":"application/json;charset=utf-8","subject":"acs:mns:cn-shenzhen:15812231xxxxxxxx:queues/fc-example","time":"2022-07-21T10:07:31.525Z","aliyunaccountid":"15812231xxxxxxxx","aliyunpublishtime":"2022-07-21T10:07:32.019Z","aliyunoriginalaccountid":"15812231xxxxxxxx","aliyuneventbusname":"MNS-python3-mns-queue-trigger-trigger-5h3jxxxx","aliyunregionid":"cn-shenzhen","aliyunpublishaddr":"10.58.xx.xx","data":{"requestId":"62D92563354133CAxxxxxxxx","messageId":"0FFF111D2A6B444B7FE46AE2xxxxxxxx","messageBody":"bWVlc2FnZSBmcm9tIE1OUyBjb25zb2xl"}}'
2022-07-21 18:07:32FC Invoke End RequestId: 0FFF111D2A6B444B7FE46AE2xxxxxxxx该方式使用模拟数据进行调用测试
-
根据需要修改 access 配置
-
添加 mns 队列触发器配置
triggers: - name: eventbridgeTriggerWithMNSSource type: eventbridge config: triggerEnable: true asyncInvocationType: false eventRuleFilterPattern: '{"source":["MNS-${functionName}-eventbridgeTriggerWithMNSSource"]}' eventSourceConfig: eventSourceType: MNS eventSourceParameters: sourceMNSParameters: QueueName: fc-example IsBase64Decode: false
编译部署代码包
s deploys invoke --event-file event.json调用函数时收到的响应如下所示:
========= FC invoke Logs begin =========
FunctionCompute python3 runtime inited.
FC Invoke Start RequestId: 30ee4b56-4ab8-4152-8680-bb3098fadb01
2022-07-21T10:57:12.346Z 30ee4b56-4ab8-4152-8680-bb3098fadb01 [INFO] b'{ "id":"c2g71017-6f65-fhcf-a814-a396fc8d****", "source":"MNS-Function-mnstrigger", "specversion":"1.0", "type":"mns:Queue:SendMessage", "datacontenttype":"application/json; charset=utf-8", "subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus", "time":"2021-04-08T06:28:17.093Z", "aliyunaccountid":"1649015465574023", "aliyunpublishtime":"2021-10-15T07:06:34.028Z", "aliyunoriginalaccountid":"164901546557****", "aliyuneventbusname":"MNS-Function-mnstrigger", "aliyunregionid":"cn-chengdu", "aliyunpublishaddr":"42.120.XX.XX", "data":{ "requestId":"606EA3074344430D4C81****", "messageId":"C6DB60D1574661357FA227277445****", "messageBody":"TEST" }}'
FC Invoke End RequestId: 30ee4b56-4ab8-4152-8680-bb3098fadb01
Duration: 2.60 ms, Billed Duration: 3 ms, Memory Size: 128 MB, Max Memory Used: 25.02 MB
========= FC invoke Logs end =========
FC Invoke instanceId: c-62d93108-3ad49d12bf074baf8549
FC Invoke Result:
mns_queue trigger event = b'{ "id":"c2g71017-6f65-fhcf-a814-a396fc8d****", "source":"MNS-Function-mnstrigger", "specversion":"1.0", "type":"mns:Queue:SendMessage", "datacontenttype":"application/json; charset=utf-8", "subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus", "time":"2021-04-08T06:28:17.093Z", "aliyunaccountid":"1649015465574023", "aliyunpublishtime":"2021-10-15T07:06:34.028Z", "aliyunoriginalaccountid":"164901546557****", "aliyuneventbusname":"MNS-Function-mnstrigger", "aliyunregionid":"cn-chengdu", "aliyunpublishaddr":"42.120.XX.XX", "data":{ "requestId":"606EA3074344430D4C81****", "messageId":"C6DB60D1574661357FA227277445****", "messageBody":"TEST" }}'
End of method: invoke- MNS消息服务和函数计算建议部署在同一个地域

