AWS SQS의 FIFO 큐를 해봤어요.

8288 단어 FIFOsqsAWS

배경.


2018년 11월 AWS의 도쿄 권역에서 SQS(Simple Que Service)의 FIFO 큐를 제작할 수 있기 때문에 사용해 봤다.
지금까지의 큐는 SQS의 특징을 애플리케이션에서 보완해야 하기 때문에 조금 곤란했습니다.

FIFO 대기열이란?


스탠더드와 가장 큰 차이점은
  • first in first out을 통해 메시지 처리
  • 메시지 한 번만 배달(중복 없음)
  • 이런 느낌이죠?
    자세한 건 공개해주세요.

    쓰다


    SQS로 큐 만들기


    비록 이렇게 말하지만, 좀 간단하기 때문에, 나는 먼저 사랑을 끊는다.(신칸센 표를 사는 것보다 간단하다...)
    기본적으로 직접 사용할 수 있지만 기준의 귀여움이 다른 설정만 설명하면 된다.
    대기열 이름의 마지막 요구 사항 .fifo
    컨텐츠 기반 중복 제거 확인란을 엽니다.
    ON으로 설정하지 않으면 정보 로그인이 실패합니다.

    aws-sdk로 메시지 등록


    이번에 루비의 aws-sdk를 사용하여 정보 등록을 했습니다.
    나는 언어에 특별히 신경을 쓰지 않는다. 단지 대량으로 등록하고 싶을 뿐이다.
    send_message.rb
    require 'aws-sdk'
    sqs = Aws::SQS::Client.new(
        region: 'ap-northeast-1', # 東京リージョン
        access_key_id: 'access_key_id',
        secret_access_key: 'secret_access_key',
        )
    url = 'url' # FIFOキューのURL(マネージメントコンソールで確認するやつ)
    for num in 1..1000 do
      response = sqs.send_message({
        queue_url: url,
        message_body: 'standard queue message ' + num.to_s, # 登録した順番がわかるようにナンバリング
        message_attributes: { # message_attributesは特にこだわらない
          'Title' => {
           string_value: 'title',
           data_type: 'String'
          },
          'Author' => {
            string_value: 'author',
            data_type: 'String'
          },
          'WeeksOn' => {
            string_value: '6',
            data_type: 'Number'
          }
        },
        message_group_id: 'b-group', # 標準キュート違ってmessage_group_idが必須
      })
    end
    
    파와 다른 경우message_group_id는 필수다.
    message_group_아이디에 따라 순서를 유지할 수 있을 것 같아요.
    여러 호스트에서 메시지를 등록할 때 메시지 -group_id를 설정할 필요가 있을 것 같습니다.

    대기열 메시지 가져오기


    1000개의 정보를 얻으려고 시도하다.
    이것도 aws-sdk로 얻을 수 있습니다.
    receive_message.rb
    require 'aws-sdk'
    sqs = Aws::SQS::Client.new(
        region: 'ap-northeast-1', # 東京リージョン
        access_key_id: 'access_key_id',
        secret_access_key: 'secret_access_key',
        )
    url = 'url' # FIFOキューのURL(マネージメントコンソールで確認するやつ)
    loop do
      # メッセージ受信
      res = sqs.receive_message(queue_url: url,
          max_number_of_messages: 1,
          visibility_timeout: 60,
          wait_time_seconds: 1)
      # 0件だったらループから抜ける
      break if !res || !res.respond_to?(:messages) || res.messages.count.zero?
      # メッセージ出力
      puts res.messages[0].body 
      # メッセージ削除
      handle = res.messages[0].receipt_handle
      delete_res = sqs.delete_message({
        queue_url: url,
        receipt_handle: handle,
      })
    end
    
    우리는 스탠더드와 별 차이가 없다.
    지정message_group_id 방법이 있습니까?없어요?
    따라서 결과는 다음과 같다
    standard queue message 1
    standard queue message 2
    standard queue message 3
    ・
    ・
    ・
    standard queue message 998
    standard queue message 999
    standard queue message 1000
    
    이렇게 등록한 순서대로 얻을 수 있다.
    ※ 스탠드는 순서를 유지할 수 없기 때문에 이런 느낌이 든다.
    standard queue message 6
    standard queue message 5
    standard queue message 9
    ・
    ・
    ・
    standard queue message 998
    standard queue message 995
    standard queue message 999
    

    감상


    예전에는 스탠더드만 있었기 때문에 순서를 유지할 수 없었던 점을 응용 측의 기능으로 보완했다.(순서성이 중요한 데이터와 계산이 있기 때문이다. 기본적으로 중요하다고 말하는 사람도 있겠지w)
    FIFO 대열이 도쿄 지역 중심에 와서 솔직히 기쁩니다. 표준 대열과 마찬가지로 대단합니다!
    그 다음은 FIFO 대기열로 이동할 때의 영향 범위 조사인가요?

    좋은 웹페이지 즐겨찾기