Есть ли способ отложить QueueMessage в функциях Azure? - PullRequest
0 голосов
/ 31 октября 2019

Мне нужно отправить сообщение в хранилище очередей, но не заставлять его немедленно вызывать функцию, связанную с этой очередью. В этом базовом примере я хочу отправить сообщение в очередь, чтобы через 1 минуту вызвать функцию:

def main(msg: func.QueueMessage, outputQueueItem: func.Out[func.QueueMessage]) -> None:
    data = msg.get_json()

    # Do some fancy stuff

    message = func.QueueMessage(body=json.dumps({"spam": 1, "eggs": "ham"}))

    # This causes an AttributeError since you cant set time_next_visible
    message.time_next_visible = datetime.utcnow() + timedelta(minutes=1)

    outputQueueItem.set(message)

    # More fancy stuff down here

Я мог бы добавить time.sleep(60) перед отправкой сообщения, но похоже,плохая практика, плюс это задержит любой другой код ниже строки, отправляющей сообщение, и увеличит стоимость биллинга за запуск функции. Это особенно плохо, если требуется большая задержка (например, час).

Есть ли какой-нибудь хороший способ отложить немедленное включение следующей функции сообщения?

1 Ответ

1 голос
/ 01 ноября 2019

Python не может использовать долговременные функции, поэтому у вас есть два способа реализовать ваши идеи.

Во-первых, как вы говорите, используйте sleep, чтобы заставить его ждать.

Второй от Python Azure SDK, используйте метод put_message, чтобы сообщение оставалось в очереди (установите Visibility), посмотрите, как использовать put_message .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...