Как настроить TTL для сообщения хранилища очередей в контексте привязки вывода функции Azure в Python? - PullRequest
0 голосов
/ 17 января 2020

У меня есть python azure функция с привязкой вывода очереди. Я успешно использую эту привязку для очереди сообщений из функции. Можно ли установить TTL сообщения в основной очереди или в самом сообщении? Мне не нужно устанавливать его отдельно для каждого сообщения, но я сделаю это таким образом, если это единственный вариант.

host. json

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

function. 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.')

1 Ответ

1 голос
/ 17 января 2020

Пока что поддерживается только язык c#, вы можете привязать его к типу CloudQueue. Если это другой язык, вы должны использовать метод SDK для реализации. Если вы настаиваете на этой возможности, вы можете обратиться к этой проблеме github , чтобы прокомментировать ваши требования.

А ниже приведен мой тестовый код для установки TTL в триггерной функции HTTP с azure-storage-queue 2.1.0.

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
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...