Python 버전 2 클라이언트 라이브러리를 사용하는 Azure Queue Storage 코드 샘플

이 문서에서는 Python용 Azure Queue Storage 클라이언트 라이브러리 버전 2를 사용하는 코드 샘플을 보여 줍니다.

2023년 3월 31일부터 현재 Azure SDK 지침을 준수하지 않는 Azure SDK 라이브러리에 대한 지원이 중지되었습니다. 새로운 Azure SDK 라이브러리는 일관된 환경을 구동하고 보안 태세를 강화하기 위해 정기적으로 업데이트됩니다. 새 기능과 중요한 보안 업데이트를 활용하기 위해 새 Azure SDK 라이브러리로 전환하는 것이 좋습니다.

이전 라이브러리는 2023년 3월 31일 이후에도 계속 사용할 수 있지만 더 이상 Microsoft의 공식 지원 및 업데이트를 받지 않습니다. 자세한 내용은 지원 중지 공지 사항을 참조하세요.

최신 버전 12.x 클라이언트 라이브러리 버전을 사용하는 코드 샘플은 빠른 시작: Python용 Azure Queue Storage 클라이언트 라이브러리를 참조하세요.

큐 만들기

다음 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 인코딩 및 디코딩 기능을 설정합니다.

Queue Storage 개체에서 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)