我知道Azure Queue并不是严格的先进先出。
Visual Studio Server Explorer 仅显示 32 条消息。我的队列中有大约 88 条消息。
是否可以查看 Azure 队列中的所有消息而不将其中任何消息出队?
您的问题的简单答案是“不,您不能这样做”。消息中的原因
Peeking
不会改变其可见性,因此除非您的消息被其他进程出列,否则重复查看将返回相同的消息。
获取所有消息的唯一替代方法是使用具有较长可见性超时时间的
Get
消息(一次 32 条),然后一次又一次重复此过程,直到队列中没有可以出队的消息为止。但是,您面临着消息无法通过此方法处理的风险,因为它们已出列,因此对任何其他调用者来说都是不可见的。
@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()