sqs timeout 예제

AWS SQS (Simple Queue Service)는 분산된 메시지 채널로서, 애플리케이션 간의 비동기 통신을 지원합니다. 이 서비스를 사용하면 메시지 큐에 메시지를 보내고, 해당 메시지를 처리하는 워커 애플리케이션을 작성할 수 있습니다.

SQS는 메시지를 처리하는 시간 제한을 설정할 수 있는데, 이를 통해 긴 처리 시간이 걸리는 작업이나 블로킹 작업을 방지할 수 있습니다. 이러한 시간 제한은 “Visibility Timeout”이라고도 불리며, 기본적으로 메시지가 처리 중인 동안 다른 워커가 같은 메시지를 처리하지 못하도록 유지해줍니다.

아래 예제는 Node.js를 사용하여 SQS 시간 초과(timeout) 설정하는 방법을 보여줍니다.

const { Consumer } = require('sqs-consumer');

const app = Consumer.create({
  queueUrl: 'AWS_SQS_QUEUE_URL',
  handleMessage: async (message) => {
    // 메시지 처리 로직 작성

    // 예상 처리 시간이 긴 경우, 시간 초과 설정
    if (message.length > 10) {
      throw new Error('Too Long Execution Time');
    }
  },
  sqs: new AWS.SQS(),
  attributeNames: ['All'],
  messageAttributeNames: ['All'],
  pollingWaitTimeMs: 5000,
  visibilityTimeout: 60 // 시간 초과를 60초로 설정
});

app.start();

위의 예제에서 visibilityTimeout은 시간 초과를 설정하는 부분입니다. 위의 코드에서는 60초로 설정되어 있으며, 이는 메시지를 처리하는데 최대 60초까지 허용된다는 의미입니다.

시간 초과 설정은 각 메시지마다 적용되며, 처리 시간이 초과되면 메시지는 자동으로 대기열에 다시 들어가게 됩니다. 따라서 이를 통해 처리 속도에 맞춰 작업을 조절하고, 워커 애플리케이션의 안정성을 유지할 수 있습니다.

#AWS #SQS #timeout