Microservices tidak bisa selamanya berkomunikasi langsung — antrian pesan dan streaming membuat sistem tahan lonjakan dan saling lepas (decoupled). Kalian mempelajari SQS/SNS, Pub/Sub, dan event streaming seperti Kinesis, lalu membangun event-driven pipeline yang memproses data secara asynchronous.

Di episode 12 kita memecah aplikasi menjadi microservices yang saling memanggil. Masalahnya: komunikasi synchronous (request-response) itu rapuh — jika service notifications sedang lambat, seluruh request checkout ikut lambat; jika notifications down, checkout ikut gagal. Solusinya adalah decoupling: jangan panggil langsung, tapi kirim pesan.
Episode 13 membahas message queues & streaming — SQS/SNS (AWS), Pub/Sub (GCP), Kinesis/Event Hubs/Event Streaming (Azure) — dan membangun event-driven pipeline: sistem di mana komponen saling bertukar peristiwa secara asynchronous, tahan gagal, dan bisa di-scale independen.
Ada dua pola besar yang sering tertukar:
| Pola | Queue | Topic/Pub-Sub | Event Stream |
|---|---|---|---|
| Karakter | Pesan dikonsumsi 1x, lalu hilang | Disiarkan ke banyak subscriber | Replayable log, diproses kelompok |
| Contoh | SQS, Pub/Sub (subscription), Service Bus | SNS, Pub/Sub topics | Kinesis, Kafka, Event Hubs |
| Pemakaian | Task/worker | Notifikasi fan-out | Analytics, data pipeline |
Antrian pesan terkelola. Pola paling umum: service web mengirim pesan, worker (Lambda atau VM) memproses.
QUEUE_URL=$(aws sqs create-queue --queue-name orders-queue \
--query QueueUrl --output text)
aws sqs send-message --queue-url "$QUEUE_URL" \
--message-body '{"orderId": "A-001", "items": 3}'
aws sqs receive-message --queue-url "$QUEUE_URL" \
--max-number-of-messages 10Konsep penting yang wajib dipahami:
aws sqs create-queue --queue-name orders-dlq
aws sqs set-queue-attributes --queue-url "$QUEUE_URL" \
--attributes '{
"RedrivePolicy": "{\"deadLetterTargetArn\":\"arn:aws:sqs:...:orders-dlq\",\"maxReceiveCount\":3}"
}'Fan-out: satu event, banyak penerima. Contoh: order.created dikirim ke SNS topic, lalu diterima SQS (untuk diproses Lambda), Lambda lain (untuk email), dan webhook eksternal.
TOPIC_ARN=$(aws sns create-topic --name order-events --query TopicArn --output text)
aws sns subscribe --topic-arn "$TOPIC_ARN" \
--protocol sqs --notification-endpoint "$QUEUE_URL"
aws sns publish --topic-arn "$TOPIC_ARN" \
--message '{"orderId": "A-002"}'Note
Pola SNS + SQS adalah kombinasi paling umum di AWS: SNS melakukan fan-out ke banyak antrian, setiap antrian diproses oleh worker yang berbeda. Publisher tidak perlu tahu siapa konsumennya — ini decoupling sejati. GCP padanannya adalah Pub/Sub (topic + subscription), Azure: Service Bus topics dan Event Grid.
Modelnya hampir identik dengan SNS+SQS dalam satu produk:
gcloud pubsub topics create order-events
gcloud pubsub subscriptions create order-workers \
--topic=order-events --ack-deadline=60
gcloud pubsub topics publish order-events \
--message='{"orderId":"A-003"}'
gcloud pubsub subscriptions pull order-workers --limit=10Perbedaan penting: Pub/Sub tidak punya "visibility timeout" tapi ack deadline (waktu untuk mengakui pesan) — konsepnya sama: jika tidak di-ack dalam deadline, pesan dikirim ulang.
az servicebus namespace create --name sb-lab-uniq \
--resource-group rg-lab --location southeastasia
az servicebus queue create --namespace-name sb-lab-uniq \
--resource-group rg-lab --name orders-queueKetika kebutuhan naik dari "kirim pesan" ke "aliran data yang dianalisis" — log, telemetri, klik user — event stream adalah jawabannya. Amazon Kinesis dan Azure Event Hubs menyimpan peristiwa secara berurutan, memungkinkan:
aws kinesis create-stream --stream-name click-events \
--shard-count 1
aws kinesis put-record \
--stream-name click-events \
--partition-key "user-123" \
--data "$(echo '{"page":"/checkout"}' | base64)"Mana yang dipilih: queue/topic untuk tugas aplikasi, event stream untuk analisis data. Jangan paksakan Kinesis untuk "kirim email" — itu pekerjaan SQS. Dan jangan pakai SQS untuk analisis — itu pekerjaan streaming.
Mari bangun pipeline nyata: saat order dibuat, proses async berjalan.
Langkah:
order-events dan tiga subscriber (dua queue + satu stream).order.created — satu publish, tiga penerima.Inilah kekuatan decoupling: downstream tidak pernah menghalangi upstream. Sistem kalian menjadi tahan lonjakan (pesan mengantri) dan tahan kegagalan (worker bisa di-restart).
ApproximateNumberOfMessages wajib dimonitor (episode 9).Inti yang harus dibawa pulang:
Di episode 14 selanjutnya kita akan membahas CI/CD di cloud — CodeBuild/Cloud Build/Azure DevOps, pipeline deployment ke VM, container, dan serverless — serta men-deploy aplikasi otomatis dari commit ke production. Sampai jumpa di episode 14!