Azure队列查看所有消息

vwhgwdsa  于 2023-08-07  发布在  其他
关注(0)|答案(2)|浏览(83)

Azure队列不是严格的FIFO。
Visual Studio Server Explorer仅显示32条消息。我在队列中有大约88条消息。
是否可以在不对任何消息进行dequeing的情况下查看Azure队列中的所有消息?

zlwx9yxi

zlwx9yxi1#

对你的问题的简单回答是“不,你不能这样做”。原因是Peeking在消息不会改变他们的可见性,所以除非你的消息正在出队的一些其他进程,重复偷看将返回相同的消息。
获取所有消息的唯一替代方案是Get消息(一次32个),具有长可见性超时周期,然后反复重复此过程,直到队列中没有可以出队的消息。但是,使用这种方法可能会有消息无法得到处理的风险,因为这些消息已被出队,因此对任何其他调用方都不可见。

a9wyjsp7

a9wyjsp72#

@gaurav-mantri是对的,你不能偷看超过32条消息,但是你可以在不删除它们的情况下接收无限的消息(正如他所说,它们将暂时不可见,在visibility timeout指定的时间长度内)。下面是一个Python示例,说明如何做到这一点:

from azure.identity import DefaultAzureCredential
from azure.storage.queue import QueueClient, BinaryBase64DecodePolicy, BinaryBase64EncodePolicy

def main():
    counter = 0
    credential = DefaultAzureCredential()
    account_url = "https://my-queue-url.net"
    queue_name = "my_queue"
    visibility_timeout = 3000  # set this high to prevent requeuing during operation
    client = QueueClient(account_url=account_url,
                         queue_name=queue_name,
                         credential=credential,
                         message_encode_policy=BinaryBase64EncodePolicy(),
                         message_decode_policy=BinaryBase64DecodePolicy())
    message_queue = client.receive_messages(visibility_timeout=visibility_timeout)
    with open("my_messages.txt", mode="w") as f:

        for message in message_queue:
            f.write(f"{message.content.decode('utf-8')}\n")
            counter += 1
            print(counter)

if __name__ == "__main__":
    main()

字符串

相关问题