有没有办法在Azure函数中延迟QueueMessage?

2024-05-23 23:42:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将消息提交到队列存储,但不能让它立即触发绑定到该队列的函数。在这个基本示例中,我想向队列提交一条消息,以便它在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),但这似乎是一种不好的做法,而且它会延迟行以下的任何其他代码提交消息,并增加运行该函数的计费成本。如果需要大量的延迟(例如一小时),这种情况尤其糟糕。你知道吗

有没有什么好方法可以延迟消息立即触发下一个函数?你知道吗


Tags: 函数json消息messagetime队列msgnext
1条回答
网友
1楼 · 发布于 2024-05-23 23:42:34

Python不能使用持久函数,所以有两种方法来实现您的想法。你知道吗

首先,就像你说的,用睡眠让它等待。你知道吗

第二个是从Python Azure SDK开始,使用put_message方法使消息留在队列中(设置Visibility),看看如何使用put_message。你知道吗

相关问题 更多 >