unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
RabbitMQ

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 #

  1. Instal Erlang: RabbitMQ membutuhkan Erlang untuk berjalan.

    sudo apt-get update
    sudo apt-get install erlang
    
  2. Instal RabbitMQ:

    sudo apt-get install rabbitmq-server
    
  3. Mulai RabbitMQ:

    sudo systemctl start rabbitmq-server
    sudo systemctl enable rabbitmq-server
    
  4. 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.