Amazon Simple Queue Service (SQS) memungkinkan Anda untuk mengirim, menyimpan, dan menerima pesan antarkomponen perangkat lunak berapa pun volumenya, tanpa kehilangan pesan atau memerlukan layanan lain agar dapat tersedia
Create queue
Queue type Standard
aws sqs create-queue --queue-name my-queue
Queue type FIFO
aws sqs create-queue --queue-name my-queue.fifo --attributes FifoQueue=true
List queues
aws sqs list-queues
Send message
Untuk send message menggunakan nodejs. Pertama install module berikut
npm install @slack/web-api
npm install aws-sdk
Standard
Buat dan edit file standard.js
const AWS = require('aws-sdk');
const sqs = new AWS.SQS({ region: 'ap-southeast-1', accessKeyId: 'XXX', secretAccessKey: 'XXXXXX' });
const queueUrl = 'https://sqs.ap-southeast-1.amazonaws.com/XXXXXX'; //ganti queueUrl dengan URL antrian SQS yang digunakan
//const messageGroupId = '54321'; //ganti YOUR_MESSAGE_GROUP_ID dengan ID grup pesan yang digunakan
const params = {
MessageBody: 'Coba SQS Standard', //ganti pesan dengan pesan yang ingin dikirim
QueueUrl: queueUrl,
//MessageGroupId: messageGroupId,
//MessageDeduplicationId: `${Date.now()}` //tambahkan parameter ini untuk menghindari pesan duplikat
};
sqs.sendMessage(params, (err, data) => {
if (err) {
console.log("Error", err);
} else {
console.log("Pesan berhasil dikirim", data.MessageId);
}
});
Selanjutnya jalankan dengan perintah node
node standard.js
FIFO
Buat dan edit file fifo.js
const AWS = require('aws-sdk');
const sqs = new AWS.SQS({ region: 'ap-southeast-1', accessKeyId: 'XXX', secretAccessKey: 'XXXXXX' });
const queueUrl = 'https://sqs.ap-southeast-1.amazonaws.com/XXXXXX.fifo'; //ganti queueUrl dengan URL antrian SQS yang digunakan
const messageGroupId = '1234'; //ganti YOUR_MESSAGE_GROUP_ID dengan ID grup pesan yang digunakan
const params = {
MessageBody: 'Coba SQS FIFO', //ganti pesan dengan pesan yang ingin dikirim
QueueUrl: queueUrl,
MessageGroupId: messageGroupId,
MessageDeduplicationId: `${Date.now()}` //tambahkan parameter ini untuk menghindari pesan duplikat
};
sqs.sendMessage(params, (err, data) => {
if (err) {
console.log("Error", err);
} else {
console.log("Pesan berhasil dikirim", data.MessageId);
}
});
Cek queues
Jika output pada saat menjalankan perintah node
tidak muncul error seharusnya queue message berhasil terkirim atau masuk kedalam antrian
Receive message
Untuk receive message menggunakan Web Slack API untuk implementasinya
Standard queue
Buat dan edit file bacastandard.js
const AWS = require('aws-sdk');
const { WebClient } = require('@slack/web-api');
// Konfigurasi AWS SDK
const sqs = new AWS.SQS({
region: 'ap-southeast-1',
accessKeyId: 'XXX',
secretAccessKey: 'XXXXXX'
});
// Konfigurasi Slack Web API
const slackWebClient = new WebClient('XXX');
// Nama antrian SQS
const queueUrl = 'https://sqs.ap-southeast-1.amazonaws.com/XXXXXX';
// Fungsi untuk mengambil pesan dari SQS dan mengirimkannya ke Slack
async function processMessages() {
const params = {
QueueUrl: queueUrl,
MaxNumberOfMessages: 10,
WaitTimeSeconds: 20
};
try {
const data = await sqs.receiveMessage(params).promise();
if (data.Messages) {
for (const message of data.Messages) {
// Kirim pesan ke Slack
const result = await slackWebClient.chat.postMessage({
channel: '#general',
text: message.Body
});
console.log(`Message sent to Slack: ${result.ts}`);
}
}
} catch (err) {
console.log(err);
}
}
// Panggil fungsi setiap 10 detik
setInterval(processMessages, 10000);
Jalankan dengan perintah node
node bacastandard.js
Queue FIFO
const AWS = require('aws-sdk');
const { WebClient } = require('@slack/web-api');
// Konfigurasi AWS SDK
const sqs = new AWS.SQS({
region: 'ap-southeast-1',
accessKeyId: 'XXX',
secretAccessKey: 'XXXXXX'
});
// Konfigurasi Slack Web API
const slackWebClient = new WebClient('XXX');
// Nama antrian SQS
const queueUrl = 'https://sqs.ap-southeast-1.amazonaws.com/XXXXXX.fifo';
// Fungsi untuk mengambil pesan dari SQS dan mengirimkannya ke Slack
async function processMessages() {
const params = {
QueueUrl: queueUrl,
MaxNumberOfMessages: 10,
WaitTimeSeconds: 20
};
try {
const data = await sqs.receiveMessage(params).promise();
if (data.Messages) {
for (const message of data.Messages) {
// Kirim pesan ke Slack
const result = await slackWebClient.chat.postMessage({
channel: '#general',
text: message.Body
});
console.log(`Message sent to Slack: ${result.ts}`);
// Tandai pesan sebagai terlihat dengan menetapkan 'visibility timeout'
const changeVisibilityParams = {
QueueUrl: queueUrl,
ReceiptHandle: message.ReceiptHandle,
VisibilityTimeout: 0 // tetapkan ke 0 untuk menandai pesan sebagai terlihat
};
await sqs.changeMessageVisibility(changeVisibilityParams).promise();
}
}
} catch (err) {
console.log(err);
}
}
// Panggil fungsi setiap 10 detik
setInterval(processMessages, 10000);
Cek message

Cek jumlah queue message
Buat dan edit file jumlahsqs.js
const AWS = require('aws-sdk');
const { WebClient } = require('@slack/web-api');
const region = 'ap-southeast-1';
const accessKeyId = 'XXX';
const secretAccessKey = 'XXXXXX';
const slackBotToken = 'XXX';
const slackChannel = '#general';
const sqs = new AWS.SQS({ region, accessKeyId, secretAccessKey });
const slackWebClient = new WebClient(slackBotToken);
const getQueueAttributes = async (queueUrl) => {
const { Attributes } = await sqs.getQueueAttributes({
QueueUrl: queueUrl,
AttributeNames: ['ApproximateNumberOfMessages', 'ApproximateNumberOfMessagesNotVisible'],
}).promise();
return Attributes;
};
const processMessages = async (minMessageCount) => {
try {
// Ganti `QueueNamePrefix` sesuai nama queue
const { QueueUrls } = await sqs.listQueues({ QueueNamePrefix: 'slack' }).promise();
for (const queueUrl of QueueUrls) {
const queueName = queueUrl.split('/').pop();
const { ApproximateNumberOfMessages, ApproximateNumberOfMessagesNotVisible } = await getQueueAttributes(queueUrl);
if (ApproximateNumberOfMessages >= minMessageCount) {
const message = `Messages available in ${queueName}: ${ApproximateNumberOfMessages}, messages in flight: ${ApproximateNumberOfMessagesNotVisible}`;
await slackWebClient.chat.postMessage({ channel: slackChannel, text: message });
}
}
} catch (error) {
console.error(error);
}
};
setInterval(() => processMessages(1), 60000);
Jalankan dengan perintah node
node jumlahsqs.js

Hapus queue messages
Menghapus antrian pada queue standard dan fifo
Standard
Buat dan edit file hapusstandard.js
const { WebClient } = require("@slack/web-api");
const AWS = require("aws-sdk");
// Konfigurasi AWS SQS
const sqs = new AWS.SQS({
region: "us-east-1",
accessKeyId: "ACCESS_KEY_ID",
secretAccessKey: "SECRET_ACCESS_KEY",
});
// URL SQS
const queueUrl = "SQS_QUEUE_URL";
// Konfigurasi Slack API
const slackBotToken = "SLACK_BOT_TOKEN";
const slackChannel = "#general";
const slackWebClient = new WebClient(slackBotToken);
// Fungsi untuk menghapus pesan dari SQS
async function deleteMessagesFromQueue(receiptHandles) {
const deleteParams = {
Entries: receiptHandles.map((handle, index) => ({
Id: `${index}`,
ReceiptHandle: handle,
})),
QueueUrl: queueUrl,
};
try {
const response = await sqs.deleteMessageBatch(deleteParams).promise();
console.log(`${response.Successful.length} messages deleted`);
} catch (error) {
console.error("Error deleting messages from SQS", error);
}
}
// Fungsi untuk mengirim notifikasi ke Slack
async function sendSlackNotification(message) {
try {
const response = await slackWebClient.chat.postMessage({
channel: slackChannel,
text: message,
});
console.log("Slack notification sent: ", response.ts);
} catch (error) {
console.error("Error sending Slack notification", error);
}
}
// Fungsi utama
async function main() {
// Ambil pesan dari SQS
const receiveParams = {
QueueUrl: queueUrl,
MaxNumberOfMessages: 10,
VisibilityTimeout: 30,
WaitTimeSeconds: 20,
};
try {
const response = await sqs.receiveMessage(receiveParams).promise();
const messages = response.Messages || [];
console.log(`${messages.length} messages received`);
if (messages.length > 0) {
// Proses pesan
const receiptHandles = messages.map((message) => message.ReceiptHandle);
await deleteMessagesFromQueue(receiptHandles);
await sendSlackNotification(
`Successfully deleted ${messages.length} messages from SQS`
);
}
} catch (error) {
console.error("Error receiving messages from SQS", error);
}
}
// Panggil fungsi utama
main();
Jalankan dengan perintah node
node hapusstandard.js
FIFO
Buat dan edit file hapusfifo.js
const AWS = require('aws-sdk');
const { WebClient } = require('@slack/web-api');
const sqs = new AWS.SQS({
region: 'ap-southeast-1',
accessKeyId: 'YOUR_ACCESS_KEY_ID',
secretAccessKey: 'YOUR_SECRET_ACCESS_KEY'
});
const web = new WebClient('SLACK_BOT_TOKEN');
const queueUrl = 'YOUR_QUEUE_URL';
async function deleteMessage() {
try {
const { Messages } = await sqs.receiveMessage({
QueueUrl: queueUrl,
MaxNumberOfMessages: 1,
VisibilityTimeout: 30,
WaitTimeSeconds: 20,
AttributeNames: ['All'],
MessageAttributeNames: ['All']
}).promise();
if (!Messages) {
console.log('No message to process');
return;
}
const message = Messages[0];
// Do something with the message here, e.g. send it to Slack
const slackResponse = await web.chat.postMessage({
channel: '#general',
text: `Received a message from SQS: ${message.Body}`
});
console.log('Slack response:', slackResponse);
// Delete the message from the queue
const deleteParams = {
QueueUrl: queueUrl,
ReceiptHandle: message.ReceiptHandle
};
await sqs.deleteMessage(deleteParams).promise();
console.log(`Message ${message.MessageId} deleted from the queue`);
} catch (error) {
console.error(error);
}
}
setInterval(() => {
deleteMessage();
}, 5000);
Setelah script dijalankan dengan perintah node
seharusnya total message akan berkurang
Hapus queue
aws sqs delete-queue --queue-url https://sqs.us-east-1.amazonaws.com/80398EXAMPLE/MyNewerQueue