繁体   English   中英

如何在 Python 中的 Azure 函数输出绑定的上下文中设置队列存储消息 TTL?

[英]How can I set Queue Storage message TTL in the context of an Azure Function output binding in Python?

我有一个带有队列输出绑定的 python azure 函数。 我成功地使用此绑定从函数内对消息进行排队。 是否可以在底层队列或消息本身上设置消息 TTL? 我不需要在每条消息的基础上设置它,但如果这是唯一的选择,我会这样做。

主机文件

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[1.*, 2.0.0)"
  }
}

函数.json

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    },
    {
      "type": "queue",
      "direction": "out",
      "name": "msg",
      "queueName": "predictions",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

功能码

import json
import logging
import azure.functions as func
from graphene import Schema
from .helpers import responses
from .schema.Query import Query

def main(req: func.HttpRequest, msg: func.Out[func.QueueMessage]) -> func.HttpResponse:
    logging.info('Executing GraphQL function.')

    try:
        query = req.get_body().decode()
    except ValueError:
        pass

    if query:
        schema = Schema(Query)
        results = schema.execute(query)
        response = responses.graphql(results)

        # Write response to azure queue storage
        message = responses.storage(query, response)
        if message:
            msg.set(message)

        return response
    else:
        return responses.bad_request(
            'Please pass a GraphQL query in the request body.')

目前只支持 c# 语言,可以绑定到CloudQueue类型。 如果是其他语言,则必须使用SDK方法来实现。 如果你坚持这个功能,你可以到这个github 问题来评论你的要求。

下面是我使用azure-storage-queue 2.1.0在 HTTP 触发器函数中设置 TTL 的测试代码。

import logging
import azure.functions as func
from azure.storage.queue import QueueService
import os

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    queue_service = QueueService(connection_string=os.environ['AzureWebJobsStorage'])

    message = req.params.get('message')
    if not message:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            message = req_body.get('message')

    if message:
        queue_service.put_message('myqueue',message,None,300,None)
        return func.HttpResponse(f" {message}!")
    else:
        return func.HttpResponse(
             "Please pass message in the request body",
             status_code=400
        )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM