Azure 队列查看所有消息

问题描述 投票:0回答:2

我知道Azure Queue并不是严格的先进先出。
Visual Studio Server Explorer 仅显示 32 条消息。我的队列中有大约 88 条消息。
是否可以查看 Azure 队列中的所有消息而不将其中任何消息出队?

azure azure-storage azure-queues azure-sdk-.net
2个回答
12
投票

您的问题的简单答案是“不,您不能这样做”。消息中的原因

Peeking
不会改变其可见性,因此除非您的消息被其他进程出列,否则重复查看将返回相同的消息。

获取所有消息的唯一替代方法是使用具有较长可见性超时时间的

Get
消息(一次 32 条),然后一次又一次重复此过程,直到队列中没有可以出队的消息为止。但是,您面临着消息无法通过此方法处理的风险,因为它们已出列,因此对任何其他调用者来说都是不可见的。


0
投票

@gaurav-mantri 是对的,你不能查看超过32条消息,但你可以接收无限的消息而不删除它们(正如他所说,它们将暂时出列)。这是一个 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()
© www.soinside.com 2019 - 2024. All rights reserved.