Skip to main content

Message Queueing

Hier ist ein umfassender Wiki-Artikel zum Thema Message Queuing, mit besonderem Fokus auf RabbitMQ als Praxisbeispiel:

 


 

 

📬 Message Queuing – Grundlagen und Praxis mit RabbitMQ

 


 

1. EinfĂĽhrung: Was ist Message Queuing?

 


Message Queuing (MQ) ist ein Kommunikationsparadigma, das es ermöglicht, Nachrichten asynchron zwischen verschiedenen Komponenten eines Systems auszutauschen. Dabei werden Nachrichten in einer Warteschlange (Queue) zwischengespeichert, bis sie von einem Empfänger (Consumer) verarbeitet werden. Dieses Modell fördert die Entkopplung von Systemkomponenten und erhöht die Skalierbarkeit und Fehlertoleranz von Anwendungen.


 

2. Vorteile von Message Queuing

 

 

  • Asynchrone Kommunikation: Sender und Empfänger mĂĽssen nicht gleichzeitig aktiv sein.

  • Entkopplung: Komponenten können unabhängig voneinander entwickelt und betrieben werden.

  • Lastverteilung: Nachrichten können auf mehrere Empfänger verteilt werden, um die Verarbeitungslast zu verteilen.

  • Fehlertoleranz: Nachrichten bleiben in der Queue, bis sie erfolgreich verarbeitet wurden, was die Zuverlässigkeit erhöht.

  • Skalierbarkeit: Einfaches HinzufĂĽgen weiterer Empfänger zur Verarbeitung steigender Nachrichtenmengen.

 


 

Anwendungsfälle

  • Auftragsverarbeitung: Bestellungen werden in einer Queue gespeichert und von einem Backend-System verarbeitet.

  • E-Mail-Versand: E-Mails werden als Nachrichten in eine Queue gestellt und von einem separaten Dienst versendet.

  • Log-Verarbeitung: Anwendungslogs werden gesammelt und asynchron analysiert.

  • Microservices-Kommunikation: Services kommunizieren ĂĽber Nachrichten, um lose gekoppelt zu bleiben.

 


 

RabbitMQ – Ein Praxisbeispiel

RabbitMQ ist ein weit verbreiteter, quelloffener Message Broker, der das Advanced Message Queuing Protocol (AMQP) implementiert. Es ermöglicht das Senden, Empfangen und Weiterleiten von Nachrichten zwischen Anwendungen oder Diensten.

Grundkonzepte

  • Producer: Erzeugt und sendet Nachrichten.

  • Exchange: Empfängt Nachrichten vom Producer und leitet sie gemäß bestimmter Regeln weiter.

  • Queue: Speichert Nachrichten, bis sie vom Consumer abgeholt werden.

  • Consumer: Empfängt und verarbeitet Nachrichten aus der Queue.

 

Exchange-Typen

  • Direct: Leitet Nachrichten basierend auf einer exakten Routing-Key-Ăśbereinstimmung weiter.

  • Fanout: Leitet Nachrichten an alle gebundenen Queues weiter, unabhängig vom Routing Key.

  • Topic: Leitet Nachrichten basierend auf Musterabgleich des Routing Keys weiter.

  • Headers: Leitet Nachrichten basierend auf Header-Attributen weiter.

 

Implementierung mit RabbitMQ

Installation

RabbitMQ kann lokal installiert oder über Docker bereitgestellt werden. Eine einfache Möglichkeit ist die Verwendung des offiziellen Docker-Images:

docker run -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-management

Dies startet RabbitMQ mit dem Management-Plugin, das ĂĽber http://localhost:15672 erreichbar ist.

 

Beispiel: Nachricht senden und empfangen mit Python

Verwendung der pika-Bibliothek:


Producer (Sender):

import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()

Consumer (Empfänger):

import pika

def callback(ch, method, properties, body):
    print(f" [x] Received {body}")

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()

Diese einfachen Beispiele zeigen, wie Nachrichten in eine Queue gesendet und von dort empfangen werden können.

 

Zusammenfassung

Message Queuing ist ein leistungsfähiges Muster zur asynchronen Kommunikation in verteilten Systemen. RabbitMQ bietet eine robuste und flexible Implementierung dieses Musters und ist in vielen Szenarien einsetzbar, von einfachen Anwendungen bis hin zu komplexen Microservices-Architekturen.

 

WeiterfĂĽhrende Ressourcen: