RabbitMQ #
RabbitMQ adalah message broker open-source yang digunakan untuk mengirim dan menerima pesan antara aplikasi, sistem, atau layanan. RabbitMQ mendukung berbagai protokol pesan seperti AMQP, MQTT, dan STOMP.
1. Instalasi RabbitMQ #
Instalasi RabbitMQ di Linux #
-
Instal Erlang: RabbitMQ membutuhkan Erlang untuk berjalan.
sudo apt-get update sudo apt-get install erlang
-
Instal RabbitMQ:
sudo apt-get install rabbitmq-server
-
Mulai RabbitMQ:
sudo systemctl start rabbitmq-server sudo systemctl enable rabbitmq-server
-
Cek Status RabbitMQ:
sudo systemctl status rabbitmq-server
2. Instalasi RabbitMQ Client untuk Python #
Untuk menghubungkan dan berinteraksi dengan RabbitMQ dari Python, kita menggunakan library pika
. Instal library ini menggunakan pip
:
pip install pika
3. Menghubungkan ke RabbitMQ dan Operasi Dasar #
Berikut adalah contoh bagaimana menghubungkan ke RabbitMQ dan melakukan operasi dasar seperti menghasilkan dan mengkonsumsi pesan.
Menghasilkan Pesan (Producer) #
import pika
# Membuat koneksi ke RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# Membuat antrian
channel.queue_declare(queue='hello')
# Mengirim pesan ke antrian
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello, World!')
print(" [x] Sent 'Hello, World!'")
connection.close()
Mengkonsumsi Pesan (Consumer) #
import pika
# Membuat koneksi ke RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# Membuat antrian (antrian harus ada sebelum menerima pesan)
channel.queue_declare(queue='hello')
# Fungsi callback untuk memproses pesan yang diterima
def callback(ch, method, properties, body):
print(f" [x] Received {body.decode()}")
# Mengatur callback untuk menerima pesan dari antrian
channel.basic_consume(queue='hello',
on_message_callback=callback,
auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
4. Operasi Lanjutan #
RabbitMQ mendukung berbagai operasi lanjutan seperti pertukaran (exchange), routing, dan pengaturan kualitas layanan.
Menggunakan Exchange dan Routing Key #
Exchange memungkinkan Anda untuk mengarahkan pesan ke antrian yang berbeda berdasarkan routing key.
Producer dengan Exchange dan Routing Key:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# Membuat exchange bertipe 'direct'
channel.exchange_declare(exchange='logs', exchange_type='direct')
# Mengirim pesan dengan routing key
routing_key = 'info'
message = 'This is an info message'
channel.basic_publish(exchange='logs', routing_key=routing_key, body=message)
print(f" [x] Sent {routing_key}:{message}")
connection.close()
Consumer dengan Exchange dan Routing Key:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# Membuat exchange dan antrian
channel.exchange_declare(exchange='logs', exchange_type='direct')
result = channel.queue_declare(queue='', exclusive=True)
queue_name = result.method.queue
# Mengikat antrian ke exchange dengan routing key
routing_key = 'info'
channel.queue_bind(exchange='logs', queue=queue_name, routing_key=routing_key)
print(' [*] Waiting for messages. To exit press CTRL+C')
def callback(ch, method, properties, body):
print(f" [x] Received {body.decode()}")
channel.basic_consume(queue=queue_name, on_message_callback=callback, auto_ack=True)
channel.start_consuming()
Pengaturan Kualitas Layanan (QoS) #
Anda bisa mengatur prefektif pesan (prefetch count) untuk memastikan bahwa konsumen tidak terlalu terbebani.
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
# Mengatur QoS
channel.basic_qos(prefetch_count=1)
def callback(ch, method, properties, body):
print(f" [x] Received {body.decode()}")
ch.basic_ack(delivery_tag=method.delivery_tag)
channel.basic_consume(queue='hello', on_message_callback=callback)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
Kesimpulan #
RabbitMQ adalah message broker yang handal dan fleksibel untuk komunikasi asinkron antara komponen aplikasi. Dengan library pika
, integrasi RabbitMQ dengan aplikasi Python menjadi mudah dan efisien. Untuk informasi lebih lanjut, Anda bisa merujuk ke dokumentasi resmi RabbitMQ dan pika.