有没有办法在 Azure Functions 中延迟 QueueMessage?
Is there a way to delay a QueueMessage in Azure Functions?
我需要向队列存储提交消息,但不让它立即触发绑定到该队列的函数。在这个基本示例中,我想向队列提交一条消息,以便它在 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)
,但这似乎是一种不好的做法,而且它会延迟提交消息行下方的任何其他代码并增加 [=18= 的计费成本] 功能。如果需要很大的延迟(例如一个小时),这尤其糟糕。
有什么好的方法可以延迟消息立即触发下一个功能吗?
Python不能使用持久函数,所以你有两种实现思路。
首先就是如你所说,使用sleep让它等待
第二个来自Python Azure SDK
,使用put_message
方法让消息留在队列中(设置Visibility
) ,看看如何使用 put_message.
我需要向队列存储提交消息,但不让它立即触发绑定到该队列的函数。在这个基本示例中,我想向队列提交一条消息,以便它在 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)
,但这似乎是一种不好的做法,而且它会延迟提交消息行下方的任何其他代码并增加 [=18= 的计费成本] 功能。如果需要很大的延迟(例如一个小时),这尤其糟糕。
有什么好的方法可以延迟消息立即触发下一个功能吗?
Python不能使用持久函数,所以你有两种实现思路。
首先就是如你所说,使用sleep让它等待
第二个来自Python Azure SDK
,使用put_message
方法让消息留在队列中(设置Visibility
) ,看看如何使用 put_message.