使用 Python 版本 2 客户端库的 Azure 队列存储代码示例

本文介绍使用适用于 Python 的 Azure 队列存储客户端库版本 2 的代码示例。

2023 年 3 月 31 日,我们停用了对不符合当前 Azure SDK 指南的 Azure SDK 库的支持。 新的 Azure SDK 库会定期更新,以推动一致的体验并增强安全态势。 建议转换到新的 Azure SDK 库,以利用新功能和关键安全更新。

尽管 2023 年 3 月 31 日之后仍然可以使用较旧的库,但它们将不再从 Microsoft 获得官方支持和更新。 有关详细信息,请参阅支持停用公告

有关使用最新版本 12.x 客户端库版本的代码示例,请参阅快速入门:适用于 Python 的 Azure 队列存储客户端库

创建队列

然后,添加以下 import 指令:

from azure.storage.queue import (
        QueueService,
        QueueMessageFormat
)

以下代码使用存储连接字符串创建 QueueService 对象。

# Retrieve the connection string from an environment
# variable named AZURE_STORAGE_CONNECTION_STRING
connect_str = os.getenv("AZURE_STORAGE_CONNECTION_STRING")

# Create a unique name for the queue
queue_name = "queue-" + str(uuid.uuid4())

# Create a QueueService object which will
# be used to create and manipulate the queue
print("Creating queue: " + queue_name)
queue_service = QueueService(connection_string=connect_str)

# Create the queue
queue_service.create_queue(queue_name)

Azure 队列消息以文本形式存储。 如果要存储二进制数据,请在将消息放入队列之前设置 Base64 编码和解码函数。

在队列存储对象上配置 Base64 编码和解码函数:

# Setup Base64 encoding and decoding functions
queue_service.encode_function = QueueMessageFormat.binary_base64encode
queue_service.decode_function = QueueMessageFormat.binary_base64decode

在队列中插入消息

若要在队列中插入消息,可使用 put_message 方法创建一条新消息并将其添加到队列中。

message = u"Hello, World"
print("Adding message: " + message)
queue_service.put_message(queue_name, message)

扫视消息

可以通过调用 peek_messages 方法来速览消息,而不会将其从队列中删除。 默认情况下,此方法会速览单个消息。

messages = queue_service.peek_messages(queue_name)

for peeked_message in messages:
    print("Peeked message: " + peeked_message.content)

更改已排队消息的内容

下面的代码使用 update_message 方法来更新消息。 可见性超时设为 0,这意味着消息会立刻出现且内容将更新。

messages = queue_service.get_messages(queue_name)

for message in messages:
    queue_service.update_message(
        queue_name, message.id, message.pop_receipt, 0, u"Hello, World Again")

获取队列长度

get_queue_metadata 方法返回包括 approximate_message_count 在内的队列属性。

metadata = queue_service.get_queue_metadata(queue_name)
count = metadata.approximate_message_count
print("Message count: " + str(count))

结果仅是近似值,因为在服务响应请求之后,可能添加或删除了消息。

取消消息的排队

在调用 get_messages 时,默认情况下会获得队列中的下一条消息。 从 get_messages 返回的消息对于从此队列读取消息的任何其他代码都是不可见的。 默认情况下,此消息持续 30 秒不可见。 若要完成从队列中删除消息,还必须调用 delete_message

messages = queue_service.get_messages(queue_name)

for message in messages:
    print("Deleting message: " + message.content)
    queue_service.delete_message(queue_name, message.id, message.pop_receipt)

可通过两种方式自定义队列中消息的检索。 首先,可获取一批消息(最多 32 条)。 其次,可以设置更长或更短的不可见超时时间,从而允许代码使用更多或更少时间来完全处理每个消息。

以下代码示例使用 get_messages 方法在一次调用中获取 16 条消息。 然后,使用 for 循环处理每条消息。 它还将每条消息的不可见超时时间设置为 5 分钟。

messages = queue_service.get_messages(queue_name, num_messages=16, visibility_timeout=5*60)

for message in messages:
    print("Deleting message: " + message.content)
    queue_service.delete_message(queue_name, message.id, message.pop_receipt)

删除队列

若要删除队列及其包含的所有消息,请调用 delete_queue 方法。

print("Deleting queue: " + queue_name)
queue_service.delete_queue(queue_name)