Back to IF4031 Arsitektur Aplikasi Terdistribusi

AMQP dan RabbitMQ - Arsitektur Smart Broker

Questions/Cues

  • Apa itu AMQP?

  • Apa model AMQP?

  • Apa itu arsitektur Smart Broker?

  • Apa peran Exchange?

  • Apa peran Queue?

  • Apa itu Binding?

  • Apa saja jenis-jenis Exchange?

  • Bagaimana cara kerja Direct Exchange?

  • Bagaimana cara kerja Fanout Exchange?

  • Bagaimana cara kerja Topic Exchange?

Reference Points

  • 10-IF4031-07-2023-Message-Publish-Subscribe-2.pdf

Advanced Message Queuing Protocol (AMQP)

AMQP adalah sebuah protokol open standard di application layer untuk sistem messaging. Tujuannya adalah untuk menstandardisasi komunikasi antara klien dan message broker, sehingga implementasi dari vendor yang berbeda dapat saling berinteraksi. RabbitMQ adalah salah satu implementasi message broker AMQP yang paling populer.

Arsitektur Smart Broker, Dumb Client

RabbitMQ mengikuti filosofi “broker pintar, klien bodoh”.

  • Smart Broker: Semua logika perutean (routing) pesan yang kompleks berada di sisi broker (RabbitMQ). Broker bertanggung jawab penuh untuk menentukan ke mana sebuah pesan harus dikirim.

  • Dumb Client (Producer/Consumer): Klien tidak perlu tahu ke mana pesan akan berakhir. Producer hanya mempublikasikan pesan ke sebuah entitas bernama Exchange. Consumer hanya mengambil pesan dari entitas bernama Queue.

Komponen Inti RabbitMQ

Alur pesan di RabbitMQ tidak langsung dari producer ke queue.

  1. Producer mengirimkan pesan ke sebuah Exchange.

  2. Exchange menerima pesan tersebut dan, berdasarkan aturan tertentu, meneruskannya ke satu atau lebih Queue.

  3. Queue adalah tempat penyimpanan pesan sementara, menunggu untuk diambil.

  4. Consumer terhubung ke sebuah Queue dan menerima pesan darinya.

Binding: Ini adalah “aturan” yang menghubungkan sebuah Exchange ke sebuah Queue. Binding memberi tahu Exchange pesan mana yang harus diteruskan ke queue mana.

Jenis-jenis Exchange

Perilaku routing ditentukan oleh tipe Exchange. Tiga tipe utama adalah:

1. Direct Exchange

  • Mekanisme: Meneruskan pesan ke queue yang binding key-nya cocok persis dengan routing key pada pesan.

  • Kasus Penggunaan: Unicast atau point-to-point. Sangat cocok untuk mengarahkan tugas ke worker queue tertentu.

2. Fanout Exchange

  • Mekanisme: Meneruskan pesan ke semua queue yang terikat padanya, tanpa mempedulikan routing key.

  • Kasus Penggunaan: Broadcast atau publish-subscribe murni. Ideal untuk menyiarkan pembaruan state atau notifikasi ke banyak penerima.

3. Topic Exchange

  • Mekanisme: Meneruskan pesan ke queue yang binding key-nya cocok dengan pola (pattern) dari routing key pada pesan. Pola ini menggunakan wildcard:

    • * (bintang) cocok untuk tepat satu kata.

    • # (pagar) cocok untuk nol atau lebih kata.

  • Contoh:

    • Routing key pesan: logs.europe.error

    • Binding key logs.*.error akan cocok.

    • Binding key logs.europe.# akan cocok.

    • Binding key logs.asia.* tidak akan cocok.

  • Kasus Penggunaan: Multicast atau publish-subscribe berbasis konten. Sangat fleksibel untuk mengarahkan pesan ke subscriber yang hanya tertarik pada sub-kategori tertentu.

Summary

RabbitMQ adalah implementasi Message Broker dari protokol AMQP yang mengadopsi arsitektur “Smart Broker”, di mana semua logika perutean pesan yang kompleks berada di pusat. Pesan dari Producer dikirim ke sebuah Exchange, yang kemudian mendistribusikannya ke satu atau lebih Queue berdasarkan aturan Binding dan tipe Exchange (Direct untuk pencocokan pasti, Fanout untuk broadcast, dan Topic untuk pencocokan pola). Consumer kemudian mengambil pesan dari Queue, sepenuhnya terpisah dari logika perutean tersebut.