Skip to main content

Message Queueing

🧠

Hier Konzept

ist

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

 


 

 

📬 Message Queuing – Grundlagen und Praxis mit RabbitMQ

 


 

1. Einführung: Was ist Message Queuing?

 


Message Queuing (Nachrichtenwarteschlangen)MQ) ist ein Kommunikationsparadigma, das es ermöglichenglicht, es, AufgabenNachrichten asynchron abzuarbeiten.zwischen Einverschiedenen „Producer“Komponenten stellteines eineSystems Nachrichtauszutauschen. (Job)Dabei werden Nachrichten in dieeiner Queue, ein „Consumer“Warteschlange (Worker)Queue) zwischengespeichert, bis sie von einem Empfänger (Consumer) verarbeitet siewerden. später.Dieses Modell fördert die Entkopplung von Systemkomponenten und erhöht die Skalierbarkeit und Fehlertoleranz von Anwendungen.

Typische

Tools:

 

2. Vorteile von Message Queuing

 

 

  • Bull / BullMQ (für Node.js mit Redis)
  • LaravelAsynchrone QueuesKommunikation: Sender und Empfänger müssen nicht gleichzeitig aktiv sein.

  • RabbitMQ,Entkopplung: KafkaKomponenten 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 (grö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äßere Systeme)bestimmter Regeln weiter.

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

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

 

🎯 Wofür geeignet?Exchange-Typen

  • HintergrundverarbeitungDirect: Leitet Nachrichten basierend auf einer exakten Routing-Key-Übereinstimmung weiter.

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

  • Retry-MechanismenTopic: beiLeitet FehlernNachrichten basierend auf Musterabgleich des Routing Keys weiter.

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

 

Implementierung mit RabbitMQ

📦 Im CMS-KontextInstallation

EinRabbitMQ Beitragkann wirdlokal erstelltinstalliert oder landetü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 einereine Queue gesendet und von dort empfangen werden können.

 

Zusammenfassung

Message Queuing ist ein leistungsfähiges Muster zur Moderationasynchronen oderKommunikation Bildverkleinerung.in Derverteilten NutzerSystemen. siehtRabbitMQ sofortbietet „Deineine Beitragrobuste wirdund geprüft“,flexible aberImplementierung diedieses eigentlicheMusters Arbeitund passiertist imin Hintergrund.vielen Szenarien einsetzbar, von einfachen Anwendungen bis hin zu komplexen Microservices-Architekturen.

 

Weiterführende Ressourcen: