아마존 웹 서비스를 다루는 기술 30장 - 13. SQS

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

AWS API, CLI 활용하기

이재홍 http://www.pyrasis.com 2014.03.24 ~ 2014.06.30

SQS

SQS 큐에 메시지를 보내는 방법은 다음과 같습니다.

  • MessageBody: 메시지 내용입니다.
  • QueueUrl: 메시지를 보낼 SQS 큐 URL입니다.
  • DelaySeconds: 지연 전송 시간입니다.
  • MessageAttributes: 메시지 추가 속성입니다.
    • DataType: String, Number, Binary를 사용할 수 있습니다.
    • StringValue: DataType이 String, Number일 때 사용합니다.
    • BinaryValue: DataType이 Binary일 때 사용하며 Buffer 형식으로 값을 설정합니다.
sqs_1.js
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');

var sqs = new AWS.SQS();

var params = {
  MessageBody: 'Hello SQS', // 필수
  QueueUrl: 'https://sqs.ap-northeast-1.amazonaws.com/232075047203/ExampleQueue', // 필수
  DelaySeconds: 0,
  MessageAttributes: {
    someKey1: {
      DataType: 'String', // 필수
      StringValue: 'Hello String'
    },
    someKey2: {
      DataType: 'Number', // 필수
      StringValue: '10'
    },
    someKey3: {
      DataType: 'Binary', // 필수
      BinaryValue: new Buffer([1, 2, 3, 4])
    }
  }
};

sqs.sendMessage(params, function (err, data) {
  if (err)
    console.log(err, err.stack);
  else
    console.log(data);
});

메시지 추가 속성을 JSON 형태로 작성합니다.

{
  "someKey1": {
    "DataType": "String",
    "StringValue": "Hello String"
  },
  "someKey2": {
    "DataType": "Number",
    "StringValue": "10"
  }
}

--message-attributes 옵션에 작성한 JSON을 한 줄로 만들고 ' '(작은 따옴표)로 묶어서 설정합니다.

AWS CLI
$ aws sqs send-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/232075047203/ExampleQueue --message-body "Hello SQS" --message-attributes '{ "someKey1": { "DataType": "String", "StringValue": "Hello String" }, "someKey2": { "DataType": "Number", "StringValue": "10" } }'

SQS 큐에 여러 메시지를 보내는 방법은 다음과 같습니다.

  • Entries: 보낼 메시지를 배열 형태로 설정합니다.
    • Id: 각 메시지의 ID입니다. 특별한 형식은 없고 Entries 배열 안에서만 고유하면 됩니다.
  • 나머지는 메시지 보내기와 동일합니다.
sqs_2.js
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');

var sqs = new AWS.SQS();

var params = {
  Entries: [ // 필수
    {
      Id: 'abcd1',
      MessageBody: 'Hello SQS 1', // 필수
      DelaySeconds: 0,
      MessageAttributes: {
        someKey1: {
          DataType: 'String', // 필수
          StringValue: 'Hello String'
        }
      }
    },
    {
      Id: 'abcd2',
      MessageBody: 'Hello SQS 2', // 필수
      DelaySeconds: 0,
      MessageAttributes: {
        someKey1: {
          DataType: 'String', // 필수
          StringValue: 'Hello String'
        }
      }
    }
  ],
  QueueUrl: 'https://sqs.ap-northeast-1.amazonaws.com/232075047203/ExampleQueue', // 필수
};

sqs.sendMessageBatch(params, function (err, data) {
  if (err)
    console.log(err, err.stack);
  else
    console.log(data);
});

보낼 메시지를 JSON 형태로 작성합니다.

[
  {
    "Id": "abcd1",
    "MessageBody": "Hello SQS 1",
    "DelaySeconds": 0,
    "MessageAttributes": {
      "someKey1": {
        "DataType": "String",
        "StringValue": "Hello String"
      }
    }
  },
  {
    "Id": "abcd2",
    "MessageBody": "Hello SQS 2",
    "DelaySeconds": 0,
    "MessageAttributes": {
      "someKey1": {
        "DataType": "String",
        "StringValue": "Hello String"
      }
    }
  }
]

--entries 옵션에 작성한 JSON을 한 줄로 만들고 ' '(작은 따옴표)로 묶어서 설정합니다.

AWS CLI
$ aws sqs send-message-batch --queue-url https://sqs.ap-northeast-1.amazonaws.com/232075047203/ExampleQueue --entries '[ { "Id": "abcd1", "MessageBody": "Hello SQS 1", "DelaySeconds": 0, "MessageAttributes": { "someKey1": { "DataType": "String", "StringValue": "Hello String" } } }, { "Id": "abcd2", "MessageBody": "Hello SQS 2", "DelaySeconds": 0, "MessageAttributes": { "someKey1": { "DataType": "String", "StringValue": "Hello String" } } } ]'

SQS 큐에서 메시지를 받는 방법은 다음과 같습니다.

  • QueueUrl: 메시지를 받을 SQS 큐 URL입니다.
  • AttributeNames: 메시지의 속성을 함께 받습니다. 속성을 모두 받으려면 All을 설정해도 됩니다.
  • MaxNumberOfmessages: 함수 호출 한 번에 받을 최대 메시지 개수입니다. 이 옵션을 설정한다 하더라도 설정한 개수만큼 받을 수도 있고, 적게 받을 수도 있습니다.
  • MessageAttributeNames: 메시지 추가 속성을 함께 받습니다. 속성 키 이름을 배열 형태로 설정하면 되고, 속성을 모두 받으려면 All을 설정하면 됩니다.
  • VisibilityTimeout: 초 단위로 된 보기 제한 시간입니다.
  • WaitTimeSeconds: 짧은 폴링, 긴 폴링을 사용 설정입니다. 0으로 설정하면 짧은 폴링, 1이상 설정하면 긴 폴링을 사용합니다.
sqs_3.js
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');

var sqs = new AWS.SQS();

var params = {
  QueueUrl: 'https://sqs.ap-northeast-1.amazonaws.com/232075047203/ExampleQueue', // 필수
  AttributeNames: [
    'ApproximateFirstReceiveTimestamp',
    'ApproximateReceiveCount',
    'SenderId',
    'SentTimestamp'
  ],
  MaxNumberOfMessages: 1,
  MessageAttributeNames: [ 'someKey1', 'someKey2' ],
  VisibilityTimeout: 0,
  WaitTimeSeconds: 0
};

sqs.receiveMessage(params, function (err, data) {
  if (err)
    console.log(err, err.stack);
  else
    console.log(data);
});
AWS CLI
$ aws sqs receive-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/232075047203/ExampleQueue --attribute-names ApproximateFirstReceiveTimestamp ApproximateReceiveCount SenderId SentTimestamp --max-number-of-messages 1 --message-attribute-names someKey1 someKey2 --visibility-timeout 0 --wait-time-seconds 0

SQS에서 메시지를 삭제하는 방법은 다음과 같습니다.

  • QueueUrl: 메시지를 삭제할 SQS 큐 URL입니다.
  • ReceiptHandle: 삭제할 메시지의 Receipt handle입니다. 이 값은 ReceiveMessage 함수로 메시지를 받았을 때 얻을 수 있습니다.
sqs_4.js
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');

var sqs = new AWS.SQS();

var params = {
  QueueUrl: 'https://sqs.ap-northeast-1.amazonaws.com/232075047203/ExampleQueue', // 필수
  ReceiptHandle: 'cOJv9qrD9XLVlpsfwYn3xQmb+PN7hPQP9bttg4XRtlLJjwucxyntVfmsdEyaM79mad79Gd9kyG0mrLllzyQfgnAWr35aKF30LcDZGfTymgxNYGqDqUkNSi4kmQpkyWpx5rqxlfYwK87goD/mGDmlBpwEICkG+XX1qcNuv6qZVhChCiIvk6zEudwxKM5RSBUuaoQayrQyEGWsbW+F5UUXGfquwshpwrkGFrusptDAV37R6mhqc9fgShkIPhqj948fc6+pVsx/K91l3TzeWE2RRUx/5VoUtwvFTL2pfGg5VzYxCH3CgDp5TQ==', // 필수
};

sqs.deleteMessage(params, function (err, data) {
  if (err)
    console.log(err, err.stack);
  else
    console.log(data);
});
AWS CLI
$ aws sqs delete-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/232075047203/ExampleQueue --receipt-handle cOJv9qrD9XLVlpsfwYn3xQmb+PN7hPQP9bttg4XRtlLJjwucxyntVfmsdEyaM79mad79Gd9kyG0mrLllzyQfgnAWr35aKF30LcDZGfTymgxNYGqDqUkNSi4kmQpkyWpx5rqxlfYwK87goD/mGDmlBpwEICkG+XX1qcNuv6qZVhChCiIvk6zEudwxKM5RSBUuaoQayrQyEGWsbW+F5UUXGfquwshpwrkGFrusptDAV37R6mhqc9fgShkIPhqj948fc6+pVsx/K91l3TzeWE2RRUx/5VoUtwvFTL2pfGg5VzYxCH3CgDp5TQ==

SQS 큐에서 여러 메시지를 삭제하는 방법은 다음과 같습니다.

  • Entries: 삭제할 메시지를 배열 형태로 설정합니다.
    • Id: 각 메시지의 ID입니다. 특별한 형식은 없고 Entries 배열 안에서만 고유하면 됩니다.
  • 나머지는 메시지 삭제하기와 동일합니다.
sqs_5.js
var AWS = require('aws-sdk');
AWS.config.loadFromPath('./config.json');

var sqs = new AWS.SQS();

var params = {
  Entries: [ // 필수
    {
      Id: 'abcd1',
      ReceiptHandle: 'cOJv9qrD9XLVlpsfwYn3xQmb+PN7hPQPLvbKbLf00e/IVkoYGXIClWRjITleU8EbqAXtNiSV7T8mrLllzyQfgu0w7gaaHw8+gEHdHG7hCuZj60xWB5TI4kPjjV/MUdapjateCyEm0z65WeuxAS4Ek1l0SjmE5N/xC2dpWOLbFUckMs8XBsfXik95Y8/lXq55xFElXroXRfYS7hFdiLJMxcGXHmdcfD0QdJcpeUZm8wBUr207kWl6RSHiVbNrwtARY7z8v59MpKMF8bE+zk8DukIeAq61L7R6+2qfmcSJTqpiQwCnI9/PqQ==' // 필수
    },
    {
      Id: 'abcd2',
      ReceiptHandle: 'cOJv9qrD9XLVlpsfwYn3xQmb+PN7hPQPLvbKbLf00e/IVkoYGXIClWRjITleU8EbJo7ccHfwJEgmrLllzyQfgkCzVpECk03qgEHdHG7hCuZj60xWB5TI4kPjjV/MUdapjateCyEm0z65WeuxAS4Ek1l0SjmE5N/xC2dpWOLbFUckMs8XBsfXik95Y8/lXq55xFElXroXRfYS7hFdiLJMxTcp7lowhUMev8Z0XraO+cr06vpS/UXeOoU54BLWOy4+l3ApsTYkvVAF8bE+zk8DuglsZrJlCQSqyMrHz1q8QnYuwY2tJMtppg==' // 필수
    }
  ],
  QueueUrl: 'https://sqs.ap-northeast-1.amazonaws.com/232075047203/ExampleQueue', // 필수  
};

sqs.deleteMessageBatch(params, function (err, data) {
  if (err)
    console.log(err, err.stack);
  else
    console.log(data);
});

삭제할 메시지를 JSON 형태로 작성합니다.

[
  {
    "Id": "abcd1",
    "ReceiptHandle": "cOJv9qrD9XLVlpsfwYn3xQmb+PN7hPQPLvbKbLf00e/IVkoYGXIClWRjITleU8EbqAXtNiSV7T8mrLllzyQfgu0w7gaaHw8+gEHdHG7hCuZj60xWB5TI4kPjjV/MUdapjateCyEm0z65WeuxAS4Ek1l0SjmE5N/xC2dpWOLbFUckMs8XBsfXik95Y8/lXq55xFElXroXRfYS7hFdiLJMxcGXHmdcfD0QdJcpeUZm8wBUr207kWl6RSHiVbNrwtARY7z8v59MpKMF8bE+zk8DukIeAq61L7R6+2qfmcSJTqpiQwCnI9/PqQ=="
  },
  {
    "Id": "abcd2",
    "ReceiptHandle": "cOJv9qrD9XLVlpsfwYn3xQmb+PN7hPQPLvbKbLf00e/IVkoYGXIClWRjITleU8EbJo7ccHfwJEgmrLllzyQfgkCzVpECk03qgEHdHG7hCuZj60xWB5TI4kPjjV/MUdapjateCyEm0z65WeuxAS4Ek1l0SjmE5N/xC2dpWOLbFUckMs8XBsfXik95Y8/lXq55xFElXroXRfYS7hFdiLJMxTcp7lowhUMev8Z0XraO+cr06vpS/UXeOoU54BLWOy4+l3ApsTYkvVAF8bE+zk8DuglsZrJlCQSqyMrHz1q8QnYuwY2tJMtppg=="
  }
]

--entries 옵션에 작성한 JSON을 한 줄로 만들고 ' '(작은 따옴표)로 묶어서 설정합니다.

AWS CLI
$ aws sqs delete-message-batch --queue-url https://sqs.ap-northeast-1.amazonaws.com/232075047203/ExampleQueue --entries '[ { "Id": "abcd1", "ReceiptHandle": "cOJv9qrD9XLVlpsfwYn3xQmb+PN7hPQPLvbKbLf00e/IVkoYGXIClWRjITleU8EbqAXtNiSV7T8mrLllzyQfgu0w7gaaHw8+gEHdHG7hCuZj60xWB5TI4kPjjV/MUdapjateCyEm0z65WeuxAS4Ek1l0SjmE5N/xC2dpWOLbFUckMs8XBsfXik95Y8/lXq55xFElXroXRfYS7hFdiLJMxcGXHmdcfD0QdJcpeUZm8wBUr207kWl6RSHiVbNrwtARY7z8v59MpKMF8bE+zk8DukIeAq61L7R6+2qfmcSJTqpiQwCnI9/PqQ==" }, { "Id": "abcd2", "ReceiptHandle": "cOJv9qrD9XLVlpsfwYn3xQmb+PN7hPQPLvbKbLf00e/IVkoYGXIClWRjITleU8EbJo7ccHfwJEgmrLllzyQfgkCzVpECk03qgEHdHG7hCuZj60xWB5TI4kPjjV/MUdapjateCyEm0z65WeuxAS4Ek1l0SjmE5N/xC2dpWOLbFUckMs8XBsfXik95Y8/lXq55xFElXroXRfYS7hFdiLJMxTcp7lowhUMev8Z0XraO+cr06vpS/UXeOoU54BLWOy4+l3ApsTYkvVAF8bE+zk8DuglsZrJlCQSqyMrHz1q8QnYuwY2tJMtppg==" } ]'

다른 함수들의 사용 방법은 링크를 참조하기 바랍니다.
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SQS.html


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.