다음을 통해 공유


Ruby에서 Queue Storage를 사용하는 방법

팁 (조언)

Microsoft Azure Storage Explorer 사용해 보기

Microsoft Azure Storage Explorer 는 Windows, macOS 및 Linux에서 Azure Storage 데이터를 시각적으로 작업할 수 있는 Microsoft의 독립 실행형 무료 앱입니다.

개요

이 가이드에서는 Microsoft Azure Queue Storage 서비스를 사용하여 일반적인 시나리오를 수행하는 방법을 보여 줍니다. 샘플은 Ruby Azure API를 사용하여 작성됩니다. 이 시나리오에는 큐 메시지 삽입, 피킹, 가져오기삭제 , 큐 만들기 및 삭제가 포함됩니다.

Queue Storage란?

Azure Queue Storage는 HTTP 또는 HTTPS를 사용하여 인증된 호출을 통해 전 세계 어디에서나 액세스할 수 있는 많은 메시지를 저장하는 서비스입니다. 단일 큐 메시지의 크기는 최대 64KB일 수 있으며 큐에는 스토리지 계정의 총 용량 제한까지 수백만 개의 메시지가 포함될 수 있습니다. Queue Storage는 비동기적으로 처리할 작업의 백로그를 만드는 데 자주 사용됩니다.

큐 서비스의 기본 개념

Azure Queue 서비스에는 다음 구성 요소가 포함됩니다.

Azure Queue 서비스 구성 요소

  • 스토리지 계정: Azure Storage에 대한 모든 액세스는 스토리지 계정을 통해 수행됩니다. 스토리지 계정에 대한 자세한 내용은 Storage 계정 개요를 참조하세요.

  • 큐: 큐에는 메시지 집합이 포함되어 있습니다. 모든 메시지는 대기열에 포함되어야 합니다. 참고로 큐 이름은 모두 소문자여야 합니다. 큐 이름 지정에 대한 자세한 내용은 큐 및 메타데이터 명명을 참조하세요.

  • 메시지: 모든 형식의 메시지는 최대 64KB입니다. 메시지가 큐에 남아 있을 수 있는 최대 시간은 7일입니다. 2017-07-29 이상 버전에서는 최대 수명 시간이 양수일 수 있으며, 메시지가 만료되지 않음을 나타내는 -1도 가능합니다. 이 매개 변수를 생략하면 기본 TTL(Time to Live)은 7일입니다.

  • URL 형식: 큐는 URL 형식인 http://.queue.core.windows.net/<storage account> 사용하여 주소를 지정할 수 있습니다.<queue>

    다음 URL은 다이어그램의 큐를 가리킵니다.

    http://myaccount.queue.core.windows.net/incoming-orders

Azure Storage 계정 만들기

첫 번째 Azure Storage 계정을 만드는 가장 쉬운 방법은 Azure Portal을 사용하는 것입니다. 자세한 내용은 스토리지 계정 만들기를 참조하세요.

Azure PowerShell, Azure CLI 또는 .NET용 Azure Storage 리소스 공급자를 사용하여 Azure Storage 계정을 만들 수도 있습니다.

현재 Azure에서 스토리지 계정을 만들지 않으려는 경우 Azurite 스토리지 에뮬레이터를 사용하여 로컬 환경에서 코드를 실행하고 테스트할 수도 있습니다. 자세한 내용은 로컬 Azure Storage 개발에 Azurite 에뮬레이터 사용을 참조하세요.

Ruby 애플리케이션 만들기

Ruby 애플리케이션을 만듭니다. 자세한 내용은 Linux의 App Service에서 Ruby 애플리케이션 만들기를 참조하세요.

스토리지에 액세스하도록 애플리케이션 구성

Azure Storage를 사용하려면 스토리지 REST 서비스와 통신하는 편리한 라이브러리 집합을 포함하는 Ruby Azure 패키지를 다운로드하여 사용해야 합니다.

RubyGems를 사용하여 패키지 가져오기

  1. PowerShell(Windows), 터미널(Mac) 또는 Bash(Unix)와 같은 명령줄 인터페이스를 사용합니다.
  2. 명령 창에 입력 gem install azure 하여 gem 및 종속성을 설치합니다.

패키지 가져오기

즐겨 찾는 텍스트 편집기를 사용하여 스토리지를 사용하려는 Ruby 파일의 맨 위에 다음을 추가합니다.

require "azure"

Azure Storage 연결 설정

Azure 모듈은 환경 변수와 AZURE_STORAGE_ACCOUNTAZURE_STORAGE_ACCESS_KEY Azure Storage 계정에 연결하는 데 필요한 정보를 읽습니다. 이러한 환경 변수가 설정되지 않은 경우 다음 코드를 사용하기 Azure::QueueService 전에 계정 정보를 지정해야 합니다.

Azure.config.storage_account_name = "<your azure storage account>"
Azure.config.storage_access_key = "<your Azure storage access key>"

Azure Portal의 클래식 또는 Resource Manager 스토리지 계정에서 이러한 값을 가져오려면 다음을 수행합니다.

  1. Azure Portal에 로그인합니다.
  2. 사용하려는 스토리지 계정으로 이동합니다.
  3. 오른쪽의 설정 블레이드에서 액세스 키를 클릭합니다.
  4. 표시되는 액세스 키 블레이드에 액세스 키 1과 액세스 키 2가 표시됩니다. 이 중 하나를 사용할 수 있습니다.
  5. 복사 아이콘을 클릭하여 키를 클립보드에 복사합니다.

큐를 만드는 방법

다음 코드는 큐와 함께 작업할 수 있도록 하는 Azure::QueueService 개체를 만듭니다.

azure_queue_service = Azure::QueueService.new

메서드를 create_queue() 사용하여 지정된 이름의 큐를 만듭니다.

begin
  azure_queue_service.create_queue("test-queue")
rescue
  puts $!
end

방법: 큐에 메시지 삽입

큐에 메시지를 삽입하려면 create_message() 메서드를 사용하여 새 메시지를 만들어 큐에 추가합니다.

azure_queue_service.create_message("test-queue", "test message")

방법: 다음 메시지를 미리 보기

큐에서 메시지를 제거하지 않고도 peek_messages() 메서드를 호출하여 큐의 앞에서 원하는 메시지를 볼 수 있습니다. 기본적으로 peek_messages()는 단일 메시지를 피킹합니다. 피킹할 메시지 수를 지정할 수도 있습니다.

result = azure_queue_service.peek_messages("test-queue",
  {:number_of_messages => 10})

방법: 다음 메시지를 큐에서 제거하기

두 단계로 큐에서 메시지를 제거할 수 있습니다.

  1. 호출 list_messages()하면 기본적으로 큐에 다음 메시지가 표시됩니다. 가져올 메시지 수를 지정할 수도 있습니다. 반환된 list_messages() 메시지는 이 큐에서 메시지를 읽는 다른 코드에 표시되지 않습니다. 표시 시간 제한(초)을 매개 변수로 전달합니다.
  2. 큐에서 메시지 제거를 완료하려면 delete_message()도 호출해야 합니다.

메시지를 제거하는 이 2단계 프로세스는 코드가 하드웨어 또는 소프트웨어 오류로 인해 메시지를 처리하지 못할 때 코드의 다른 인스턴스가 동일한 메시지를 가져와 다시 시도할 수 있음을 보장합니다. 코드는 메시지가 처리된 직후에 delete_message()를 호출합니다.

messages = azure_queue_service.list_messages("test-queue", 30)
azure_queue_service.delete_message("test-queue",
  messages[0].id, messages[0].pop_receipt)

방법: 큐에 대기된 메시지의 내용 변경

큐에서 메시지의 내용을 직접 수정할 수 있습니다. 다음 코드는 update_message() 메서드를 사용하여 메시지를 업데이트합니다. 이 메서드는 큐 메시지의 팝 수신을 포함하는 튜플과 메시지가 큐에 표시되는 시기를 나타내는 UTC DateTime 값을 반환합니다.

message = azure_queue_service.list_messages("test-queue", 30)
pop_receipt, time_next_visible = azure_queue_service.update_message(
  "test-queue", message.id, message.pop_receipt, "updated test message",
  30)

방법: 메시지 큐에서 제거하기 위한 추가 옵션

큐에서 메시지 검색을 사용자 지정할 수 있는 두 가지 방법이 있습니다.

  1. 메시지 묶음을 받을 수 있습니다.
  2. 더 길거나 더 짧은 투명 시간 제한을 설정하여 코드가 각 메시지를 완전히 처리하는 데 더 많거나 적은 시간을 허용할 수 있습니다.

다음 코드 예제에서는 메서드를 list_messages() 사용하여 한 번의 호출로 15개의 메시지를 가져옵니다. 그런 다음 각 메시지를 인쇄하고 삭제합니다. 또한 각 메시지에 대해 표시하지 않는 제한 시간을 5분으로 설정합니다.

azure_queue_service.list_messages("test-queue", 300
  {:number_of_messages => 15}).each do |m|
  puts m.message_text
  azure_queue_service.delete_message("test-queue", m.id, m.pop_receipt)
end

큐의 길이 구하기 방법

큐의 메시지 수를 추정할 수 있습니다. 이 메서드는 get_queue_metadata() 대략적인 메시지 수 및 기타 큐 메타데이터를 반환합니다.

message_count, metadata = azure_queue_service.get_queue_metadata(
  "test-queue")

어떻게 큐를 삭제하는지

큐와 큐에 포함된 모든 메시지를 삭제하려면 큐 개체의 delete_queue() 메서드를 호출합니다.

azure_queue_service.delete_queue("test-queue")

다음 단계

이제 Queue Storage의 기본 사항을 배웠으므로 다음 링크를 따라 더 복잡한 스토리지 작업에 대해 알아봅니다.

이 문서에서 설명한 Azure Queue Storage와 Service Bus 큐를 사용하는 방법에 대해 설명한 Azure Service Bus 큐를 비교하려면 Azure Queue Storage 및 Service Bus 큐 비교 및 대조를 참조하세요.