Compartilhar via


Exemplos de código do Armazenamento de Filas do Azure usando bibliotecas de cliente do Python versão 2

Este artigo mostra exemplos de código que usam a versão 2 da biblioteca de cliente do Armazenamento de Filas do Azure para Python.

Em 31 de março de 2023, descontinuamos o suporte para bibliotecas de SDK do Azure que não estão em conformidade com as diretrizes atuais do SDK do Azure. As novas bibliotecas do SDK do Azure são atualizadas regularmente para gerar experiências consistentes e fortalecer sua postura de segurança. É recomendável que você faça a transição para as novas bibliotecas do SDK do Azure para aproveitar os novos recursos e as atualizações críticas de segurança.

Embora as bibliotecas mais antigas ainda possam ser usadas após 31 de março de 2023, elas não receberão mais suporte e atualizações oficiais da Microsoft. Para obter mais informações, confira o anúncio de desativação do suporte.

Para obter exemplos de código que usam a versão mais recente da biblioteca de clientes 12.x, consulte Início Rápido: biblioteca de clientes do Armazenamento de Filas do Azure para Python.

Criar uma fila

Adicione as seguintes diretivas import:

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

O código a seguir cria um objeto QueueService usando a cadeia de conexão da conta de armazenamento.

# 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)

As mensagens da fila do Azure são armazenadas como texto. Se você quiser armazenar dados binários, configure as funções de codificação e decodificação Base64 antes de colocar uma mensagem na fila.

Configure as funções de codificação e decodificação a codificação Base64 no objeto de Armazenamento de Filas:

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

Inserir uma mensagem em uma fila

Para inserir uma mensagem em uma fila, use o método put_message para criar uma nova mensagem e adicioná-la à fila.

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

Espiar mensagens

Você pode inspecionar as mensagens na fila sem removê-las da fila recorrendo ao método peek_messages. Por padrão, esse método inspeciona uma única mensagem.

messages = queue_service.peek_messages(queue_name)

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

Alterar o conteúdo de uma mensagem na fila

O código a seguir usa o método update_messagepara atualizar uma mensagem. O tempo limite de visibilidade está definido como 0, indicando que a mensagem será exibida imediatamente e o conteúdo será atualizado.

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")

Obter o tamanho da fila

O método get_queue_metadata retorna propriedades de fila, incluindo approximate_message_count.

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

O resultado é aproximado apenas porque as mensagens podem ser adicionadas ou removidas depois que o serviço responde à sua solicitação.

Remover mensagens da fila

Ao recorrer ao comando get_messages, você receberá a próxima mensagem em uma fila por padrão. Uma mensagem retornada de get_messages torna-se invisível para todas as outras mensagens de leitura de código da fila. Por padrão, essa mensagem permanece invisível por 30 segundos. Para concluir a remoção da mensagem da fila, chame também 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)

Há duas maneiras de personalizar a recuperação da mensagem de uma fila. Primeiro, você pode obter um lote de mensagens (até 32). Segundo, você pode definir um tempo limite de invisibilidade mais longo ou mais curto, permitindo mais ou menos tempo para seu código processar totalmente cada mensagem.

O exemplo de código a seguir usa o método get_messages para receber 16 mensagens em uma chamada. Em seguida, ele processa cada mensagem usando um loop for. Ele também define o tempo limite de invisibilidade de cinco minutos para cada mensagem.

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)

Excluir uma fila

Para excluir uma fila e todas as mensagens contidas nela, recorra ao método delete_queue.

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