Azure队列不是严格的FIFO。Visual Studio Server Explorer仅显示32条消息。我在队列中有大约88条消息。是否可以在不对任何消息进行dequeing的情况下查看Azure队列中的所有消息?
zlwx9yxi1#
对你的问题的简单回答是“不,你不能这样做”。原因是Peeking在消息不会改变他们的可见性,所以除非你的消息正在出队的一些其他进程,重复偷看将返回相同的消息。获取所有消息的唯一替代方案是Get消息(一次32个),具有长可见性超时周期,然后反复重复此过程,直到队列中没有可以出队的消息。但是,使用这种方法可能会有消息无法得到处理的风险,因为这些消息已被出队,因此对任何其他调用方都不可见。
Peeking
Get
a9wyjsp72#
@gaurav-mantri是对的,你不能偷看超过32条消息,但是你可以在不删除它们的情况下接收无限的消息(正如他所说,它们将暂时不可见,在visibility timeout指定的时间长度内)。下面是一个Python示例,说明如何做到这一点:
visibility timeout
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()
字符串
2条答案
按热度按时间zlwx9yxi1#
对你的问题的简单回答是“不,你不能这样做”。原因是
Peeking
在消息不会改变他们的可见性,所以除非你的消息正在出队的一些其他进程,重复偷看将返回相同的消息。获取所有消息的唯一替代方案是
Get
消息(一次32个),具有长可见性超时周期,然后反复重复此过程,直到队列中没有可以出队的消息。但是,使用这种方法可能会有消息无法得到处理的风险,因为这些消息已被出队,因此对任何其他调用方都不可见。a9wyjsp72#
@gaurav-mantri是对的,你不能偷看超过32条消息,但是你可以在不删除它们的情况下接收无限的消息(正如他所说,它们将暂时不可见,在
visibility timeout
指定的时间长度内)。下面是一个Python示例,说明如何做到这一点:字符串