[肥用云计算] serverless相互调用

打印 上一主题 下一主题

主题 889|帖子 889|积分 2667

前言

在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 的代码,进行测试。
  1. # 环境变量
  2. export ALIBABA_CLOUD_ACCESS_KEY_ID="aa"
  3. export ALIBABA_CLOUD_ACCESS_KEY_SECRET="bb"
复制代码
部门的代码片段:
  1. def create_mns_client():
  2.     """
  3.     创建 MNS 客户端
  4.     """
  5.     # 从环境变量获取阿里云账号 AccessKey
  6.     access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID')
  7.     access_key_secret = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
  8.     if not access_key_id or not access_key_secret:
  9.         raise ValueError("请设置环境变量 ALIYUN_ACCESS_KEY_ID 和 ALIYUN_ACCESS_KEY_SECRET")
  10.     # MNS endpoint格式:https://{AccountId}.mns.{RegionId}.aliyuncs.com
  11.     endpoint = "https://1719759326012690.mns.cn-shenzhen.aliyuncs.com"
  12.     # 创建 MNS 客户端
  13.     return Account(
  14.         endpoint,
  15.         access_key_id,
  16.         access_key_secret
  17.     )
  18. def send_message(queue_name: str, message_body: dict):
  19.     """
  20.     发送消息到 MNS 队列
  21.     @param queue_name: 队列名称
  22.     @param message_body: 消息内容(字典格式)
  23.     """
  24.     try:
  25.         # 获取 MNS 客户端
  26.         account = create_mns_client()
  27.         # 获取队列对象
  28.         queue = account.get_queue(queue_name)
  29.         # 将字典转换为 JSON 字符串
  30.         message_str = json.dumps(message_body)
  31.         # 发送消息
  32.         msg = Message(message_str)
  33.         ret_msg = queue.send_message(msg)
  34.         print(f"消息发送成功!消息ID: {ret_msg.message_id}")
  35.         print(f"消息体: {message_str}")
  36.     except MNSExceptionBase as e:
  37.         print(f"发送消息失败: {str(e)}")
  38.         raise
  39. if __name__ == '__main__':
  40.     # 测试发送消息
  41.     queue_name = "demo"
  42.     test_message = {
  43.         "key1": "command value1",
  44.         "key2": "command value2",
  45.         "timestamp": "2024-01-01 12:00:00"
  46.     }
  47.     send_message(queue_name, test_message)
复制代码
调用 python mns_send.py,引发测试功能。
观察 listener, s instance list s logs c-67bc1f31-178ea4f7-540e12151f0b --tail

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

钜形不锈钢水箱

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表