【问题标题】:How to store Azure Queue messages into blob using queue trigger function app in python如何在 python 中使用队列触发函数应用程序将 Azure 队列消息存储到 blob 中
【发布时间】:2021-09-23 18:06:33
【问题描述】:

我尝试在 azure 中使用 azure 逻辑应用程序来执行此操作,它可以工作,但要花费很多钱。 (分析需要 Blob 存储)。

此主题有 2 个问题

  1. 最好修改以下代码以将发布消息存储在 blob 存储中,还是创建一个带有队列触发器的单独函数应用以在它们进入时将它们存储在 blob 中。

  2. 如果可能的话,我如何使用示例代码来实现这一点?我在这件事上根本找不到太多的开始。所以我需要一些帮助。

我当前的函数应用可以运行,如下所示。 它需要 post 并将它们存储在队列实时 API 中。 每分钟发送一次帖子。

import logging
import azure.functions as func
import json
def main(req: func.HttpRequest, queueclient: func.Out[func.QueueMessage]) -> str:
    logging.info('Python HTTP trigger function processed a request.')
    print(req.method)

if req.method == 'GET': 
  queueclient.set('string')
  return func.HttpResponse(body='------------------------', status_code=200)

elif req.method =='POST':

    try:
        req_body = req.get_json()
    except ValueError:
           pass
    else:
      sharedSecret = req_body.get('secret')
    if sharedSecret =='':
        queueclient.set(json.dumps(req_body))
        return func.HttpResponse(body=json.dumps(req_body), status_code=201, headers={'content-Type': 'application/json'})
    else:
        return func.HttpResponse( 
          body="<h1>Please add sharedsecret string in the request body </h1>",
            status_code=401
        )

【问题讨论】:

  • 您的最终目标是将数据保存在 Blob 存储中吗?输入数据可以有多大?
  • docs.microsoft.com/en-us/azure/azure-functions/… 提供了队列触发函数(输入绑定)的示例,docs.microsoft.com/en-us/azure/azure-functions/… 提供了使用输出绑定写入 blob 的示例。如果您在接受后和写入 blob 之间有或想要异步/松散耦合,则队列很好。但是,如果发布频率较低并且您可以负担得起同步处理,那么让 1 个函数完成这两项任务会更容易。
  • 每条帖子消息 64 KB 到队列存储,直接输入到 blob 会很棒,因为队列的限制限制了我使用 100 KB。每个网络设备每分钟大约有 1 个帖子进入。 400 个网络设备。试图找到合适的人选。
  • 400 post if all on a go可能不允许同步流,这还取决于设备是否可以实现某种重试以防失败。如果没有,异步是更好的选择。如果消息大小低于 64kb,队列应该没问题。否则,您将需要服务总线或事件中心之类的东西。服务总线和队列都提供自动重试和毒/DL 队列。 Eventhub 没有。但在事件中心的情况下,您可以直接发布到事件中心,而不需要执行此操作的函数。

标签: python azure azure-functions


【解决方案1】:

谢谢Anupam Chand。发布您的建议作为帮助其他社区成员的答案。

如果您在接受后和写入 blob 之间拥有或想要异步/松散耦合,则队列是很好的选择。但是,如果发布频率较低并且您可以负担得起同步处理,那么让 1 个函数完成这两项任务会更容易。

400 post if all at a go可能不允许同步流,这还取决于设备是否可以在失败的情况下实现某种重试。如果没有,异步是更好的选择。如果消息大小低于 64kb队列应该没问题。

服务总线和队列都提供自动重试和毒/DL 队列。 Eventhub 没有。但在事件中心的情况下,您可以直接发布到事件中心,而不需要执行此操作的函数。

可以参考Azure Queue storage trigger for Azure FunctionsAzure Blob storage output binding for Azure Functions

【讨论】:

    猜你喜欢
    • 2021-02-22
    • 1970-01-01
    • 2014-01-28
    • 2019-11-08
    • 2021-10-30
    • 2022-12-14
    • 1970-01-01
    • 2022-10-08
    • 2018-01-29
    相关资源
    最近更新 更多