前言
在Serverless架构广泛应用的当代软件开发配景下,服务间的通讯已成为一项广泛需求。本文旨在探讨三种紧张的服务间通讯模式:1) 消息队列(Queue),2) HTTP协议,3) 内部网络函数调用(FC Call)。我们将详细先容每种方法的特点、实用场景及实现方式。
queue
具体的配景:bfc 是 listener,afc 是 caller,afc -> bfc。
create listener
listner 具体的方法:
- 创建 listener bfc,此中 mns trigger 就是监听着 demo eventbridge
- 创建 eventbridge,取名是 demo eventbridge,同时创建 mns queue,名字是 domo
⚠️ 开启 eventbridge 中的 base64 解密发送,如下图:
同时使用 s deploy 进行部署。
test listener
可以使用本地的 send_mns.py 的代码,进行测试。
- # 环境变量
- export ALIBABA_CLOUD_ACCESS_KEY_ID="aa"
- export ALIBABA_CLOUD_ACCESS_KEY_SECRET="bb"
复制代码 部门的代码片段:
- def create_mns_client():
- """
- 创建 MNS 客户端
- """
- # 从环境变量获取阿里云账号 AccessKey
- access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID')
- access_key_secret = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
- if not access_key_id or not access_key_secret:
- raise ValueError("请设置环境变量 ALIYUN_ACCESS_KEY_ID 和 ALIYUN_ACCESS_KEY_SECRET")
- # MNS endpoint格式:https://{AccountId}.mns.{RegionId}.aliyuncs.com
- endpoint = "https://1719759326012690.mns.cn-shenzhen.aliyuncs.com"
- # 创建 MNS 客户端
- return Account(
- endpoint,
- access_key_id,
- access_key_secret
- )
- def send_message(queue_name: str, message_body: dict):
- """
- 发送消息到 MNS 队列
- @param queue_name: 队列名称
- @param message_body: 消息内容(字典格式)
- """
- try:
- # 获取 MNS 客户端
- account = create_mns_client()
- # 获取队列对象
- queue = account.get_queue(queue_name)
- # 将字典转换为 JSON 字符串
- message_str = json.dumps(message_body)
- # 发送消息
- msg = Message(message_str)
- ret_msg = queue.send_message(msg)
- print(f"消息发送成功!消息ID: {ret_msg.message_id}")
- print(f"消息体: {message_str}")
- except MNSExceptionBase as e:
- print(f"发送消息失败: {str(e)}")
- raise
- if __name__ == '__main__':
- # 测试发送消息
- queue_name = "demo"
- test_message = {
- "key1": "command value1",
- "key2": "command value2",
- "timestamp": "2024-01-01 12:00:00"
- }
- send_message(queue_name, test_message)
复制代码 调用 python mns_send.py,引发测试功能。
观察 listener, s instance list s logs c-67bc1f31-178ea4f7-540e12151f0b --tail

观察日记,发送乐成,符合预期。
|