🦷
node.js で Amazon SQS のメッセージキューを受信する
Amazon SQS のメッセージキューから最大10個のメッセージを受け取ってきて処理するプログラムを書いていました。
tooteater.js
#!/usr/bin/env node --trace-warnings
const JSONBig = require('json-bigint')
/// Amazon SQS のクライアントをセットアップする
const AWS = require('aws-sdk')
AWS.config.loadFromPath('./aws-credential.json')
const sqs = new AWS.SQS({ apiVersion: '2012-11-05' })
const queueUrl = 'https://sqs.ap-northeast-1.amazonaws.com/xxxxxxxxxxxxxxx/QueueName'
var run = async () => {
while (true) {
try {
const data = await sqs.receiveMessage({
QueueUrl: queueUrl,
MaxNumberOfMessages: 10,
WaitTimeSeconds: 20
}).promise()
if (!data.Messages) {
continue
}
for (let i = 0; i < data.Messages.length; ++i) {
const message = data.Messages[i]
/// メッセージの中の ID が 32bit 整数を超えていることがあるので JSON.parse で失敗したときは JSONBig.parse でリトライする
const msg = JSON.parse(message.Body)
let payload = {}
if (msg.Payload.id) {
payload = msg.Payload
} else {
payload = JSONBig.parse(msg.Payload)
}
/// SQS の中身のメッセージ種別ごとの処理に分岐する
switch (msg.Type) {
case 'update':
/// Updateの処理をする
break
case 'delete':
/// Delete の処理をする
break
}
/// 正常に処理が完了したら SQS からメッセージを削除する
await sqs.deleteMessage({
QueueUrl: queueUrl,
ReceiptHandle: message.ReceiptHandle
}).promise()
}
} catch (err) {
console.error(err)
}
}
}
run()
Discussion