Lokasi ngalangkungan proxy:   [ UP ]  
[Ngawartoskeun bug]   [Panyetelan cookie]                
Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Python3 消息服务 MNS 触发器示例

本示例为您展示了 python runtime 的 消息服务MNS 主题模型触发器示例。 本示例使用了 MNS 的主题模型作为示例,与示例 python3-mns-topic-producer 一起实现了消息服务的生产者-消费者模型。 MNS的配置在函数的环境变量配置中(参考s.yaml)。

准备开始

快速开始

方式一、使用控制台创建

1. 编译打包

# 打包文件
cd code && zip -r python3-mns-topic-trigger.zip *

2. 创建函数

选择服务(或创建服务)后,单击创建函数

  • 选择 从零开始创建
  • 填入函数名称
  • 选择运行环境 Python 3.6/3.9
  • 选择函数触发方式:通过事件请求触发
  • 其他设置使用默认

详细创建函数流程见文档: 使用控制台创建函数

3. 使用模拟数据测试

  • 3.1 Json类型的测试事件
{
  "TopicOwner":"topic account id",
  "Message":"mock mns message",
  "Subscriber":"subscriber account id",
  "PublishTime":1658235558094,
  "SubscriptionName":"test-5bf13c7e",
  "MessageMD5":"652BF0E6297840015247C3xxxxxxx",
  "TopicName":"fc-example",
  "MessageId":"3405CA51807661353B3xxxxxxxx"
}

测试返回结果如下所示:

mns_topic trigger event = b'{  "TopicOwner":"topic account id",  "Message":"mock mns message",  "Subscriber":"subscriber account id",  "PublishTime":1658235558094,  "SubscriptionName":"test-5bf13c7e",  "MessageMD5":"652BF0E6297840015247C3xxxxxxx",  "TopicName":"fc-example",  "MessageId":"3405CA51807661353B3xxxxxxxx"}

返回日志如下所示

2022-07-20 15:50:15FunctionCompute python3 runtime inited.
2022-07-20 15:50:15FC Invoke Start RequestId: e677e5aa-771b-404b-9d98-78e9064a5ea6
2022-07-20 15:50:152022-07-20 15:50:15 e677e5aa-771b-404b-9d98-78e9xxxxxxxx [INFO] mns_topic trigger event = b'{\n  "TopicOwner":"topic account id",\n  "Message":"mock mns message",\n  "Subscriber":"subscriber account id",\n  "PublishTime":1658235558094,\n  "SubscriptionName":"test-5bf13c7e",\n  "MessageMD5":"652BF0E6297840015247C3xxxxxxx",\n  "TopicName":"fc-example",\n  "MessageId":"3405CA51807661353B3xxxxxxxx"\n}'
2022-07-20 15:50:15FC Invoke End RequestId: e677e5aa-771b-404b-9d98-78e9xxxxxxxx
  • 3.2 Stream类型的测试事件
mock mns message

测试返回结果如下所示:

mns_topic trigger event = b'mock mns message'

返回日志如下所示

2022-07-20 15:59:49FunctionCompute python3 runtime inited.
2022-07-20 15:59:50FC Invoke Start RequestId: 2f3583e6-94e2-479e-b297-8501xxxxxxxx
2022-07-20 15:59:502022-07-20 15:59:50 2f3583e6-94e2-479e-b297-8501xxxxxxxx [INFO] b'mock mns message'
2022-07-20 15:59:50FC Invoke End RequestId: 2f3583e6-94e2-479e-b297-8501xxxxxxxx

4. 配置MNS触发器

  • 选择 topic 模型 MNS 触发器
  • 选择 JSON 的 Event 格式

注意:若选择 STREAM 的 Event 格式,在代码中则不需要将 Event 解析成json。

img_1.png

在创建触发器过程中,页面会提示授权相关信息并让你创建 aliyunmnsnotificationrole 角色,按照页面指导创建即可。

5. 通过MNS控制台触发测试函数

img_2.png

测试返回结果如下所示:

mns_topic trigger event = b'{"TopicOwner":"15812231xxxxxxxx","Message":"json meesage from MNS console","Subscriber":"15812231xxxxxxxx","PublishTime":1658306182000,"SubscriptionName":"ree-2dfbf25f","MessageMD5":"7F1120AE2C15B843365E9A88xxxxxxxx","TopicName":"fc-example","MessageId":"20A37C322A6B444C1B386569xxxxxxxx"}'

在函数计算控制台查看请求日志,如下所示:

2022-07-20 16:36:22FunctionCompute python3 runtime inited.
2022-07-20 16:36:22FC Invoke Start RequestId: 03D74DFB-13A7-5061-9D4C-FCD1xxxxxxxx
2022-07-20 16:36:222022-07-20 16:36:22 03D74DFB-13A7-5061-9D4C-FCD1xxxxxxxx [INFO] b'{"TopicOwner":"15812231xxxxxxxx","Message":"json meesage from MNS console","Subscriber":"15812231xxxxxxxx","PublishTime":1658306182000,"SubscriptionName":"ree-2dfbf25f","MessageMD5":"7F1120AE2C15B843365E9A88xxxxxxxx","TopicName":"fc-example","MessageId":"20A37C322A6B444C1B386569xxxxxxxx"}'
2022-07-20 16:36:22FC Invoke End RequestId: 03D74DFB-13A7-5061-9D4C-FCD1xxxxxxxx

方式二、使用 Serverless Devs 工具编译部署

该方式使用模拟数据进行调用测试

1. 修改 s.yaml 配置

Yaml完整配置

  • 根据需要修改 access 配置

  • 添加 mns 触发器 配置

          triggers:
            - name: {TriggerName}
              description: ''
              sourceArn: acs:mns:{Region}:{AccountID}:/topics/{TopicName}
              type: mns_topic
              role: acs:ram::{AccountID}:role/aliyunfcdefaultrole
              qualifier: LATEST
              config:
                filterTag: ''
                notifyContentFormat: JSON
                notifyStrategy: BACKOFF_RETRY

2. 安装依赖并部署

编译部署代码包

s deploy

3. 使用模拟数据测试

s invoke --event-file event.json

调用函数时收到的响应如下所示:

========= FC invoke Logs begin =========
FunctionCompute python3 runtime inited.
FC Invoke Start RequestId: f6c84568-6251-44cf-8f2d-715exxxxxxxx
2022-07-20T07:58:17.591Z f6c84568-6251-44cf-8f2d-715exxxxxxxx [INFO] b'{  "TopicOwner":"topic account id",  "Message":"mock mns message",  "Subscriber":"subscriber account id",  "PublishTime":1658235558094,  "SubscriptionName":"test-5bf13c7e",  "MessageMD5":"652BF0E6297840015247C3xxxxxxx",  "TopicName":"fc-example",  "MessageId":"3405CA51807661353B3xxxxxxxx"}'
FC Invoke End RequestId: f6c84568-6251-44cf-8f2d-715exxxxxxxx
Duration: 9.79 ms, Billed Duration: 10 ms, Memory Size: 128 MB, Max Memory Used: 24.50 MB
========= FC invoke Logs end =========
FC Invoke instanceId: c-62d7b590-2a0ccbf206baxxxxxxxx
FC Invoke Result:
mns_topic trigger event = b'{  "TopicOwner":"topic account id",  "Message":"mock mns message",  "Subscriber":"subscriber account id",  "PublishTime":1658235558094,  "SubscriptionName":"test-5bf13c7e",  "MessageMD5":"652BF0E6297840015247C3xxxxxxx",  "TopicName":"fc-example",  "MessageId":"3405CA51807661353B3xxxxxxxx"}'
End of method: invoke

注意事项

  1. MNS消息服务和函数计算建议部署在同一个地域