有没有一种方法可以延迟Azure Functions中的QueueMessage?

时间:2019-10-31 18:24:12

标签: python azure azure-functions azure-storage-queues

我需要向队列存储提交一条消息,但没有立即触发绑定到该队列的函数。在这个基本示例中,我想向队列提交一条消息,以便在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 个答案:

答案 0 :(得分:1)

Python不能使用持久函数,因此您有两种实现想法的方法。

首先是您所说的,使用睡眠使其等待。

第二个来自 Python Azure SDK ,使用put_message方法将邮件保留在队列中(设置Visibility),看看如何使用put_message