Schritte der Docker-Lernmethode zum Erstellen des ActiveMQ-Nachrichtendienstes

Schritte der Docker-Lernmethode zum Erstellen des ActiveMQ-Nachrichtendienstes

Vorwort

ActiveMQ ist der beliebteste und leistungsstärkste Open-Source-Nachrichtenbus von Apache. ActiveMQ ist eine JMS-Provider-Implementierung, die die Spezifikationen JMS1.1 und J2EE 1.4 vollständig unterstützt. Obwohl die JMS-Spezifikation schon vor langer Zeit eingeführt wurde, spielt JMS in den heutigen J2EE-Anwendungen immer noch eine besondere Rolle.

In Produktionsprojekten wird zur Kommunikation zwischen verteilten Systemen häufig eine Nachrichten-Middleware benötigt. Es verfügt über eine Reihe von Funktionen wie geringe Kopplung, zuverlässige Übermittlung, Übertragung, Flusskontrolle und eventuelle Konsistenz. In diesem Artikel werden hauptsächlich die Konzepte und Installationsanweisungen von ActiveMQ vorgestellt. Später liegt der Schwerpunkt auf der SpringBoot-Integration zur Implementierung der Spike-Nachrichtenwarteschlange.

Konzept

JMS-Nachrichtenmodus

Punkt-zu-Punkt- oder Warteschlangenmodus

Enthält drei Rollen: Nachrichtenwarteschlange (Queue), Absender (Sender) und Empfänger (Receiver). Jede Nachricht wird an eine bestimmte Warteschlange gesendet und der Empfänger ruft die Nachricht aus der Warteschlange ab. Warteschlangen enthalten Nachrichten, bis sie verbraucht sind oder das Zeitlimit überschritten wird.

  • Jede Nachricht hat nur einen Verbraucher, d. h., sobald sie verbraucht ist, befindet sich die Nachricht nicht mehr in der Nachrichtenwarteschlange.
  • Es besteht keine Zeitabhängigkeit zwischen Absender und Empfänger. Das heißt, wenn der Absender eine Nachricht sendet, hat die Tatsache, dass der Empfänger ausgeführt wird oder nicht, keinen Einfluss auf die an die Warteschlange gesendete Nachricht.
  • Nach dem erfolgreichen Empfang der Nachricht muss der Empfänger erfolgreich auf die Warteschlange antworten.

Pub/Sub

Enthält drei Rollen: Thema, Herausgeber und Abonnent. Mehrere Herausgeber senden Nachrichten an ein Thema und das System übermittelt diese Nachrichten an mehrere Abonnenten.

  • Jede Nachricht kann mehrere Verbraucher haben
  • Es besteht eine zeitliche Abhängigkeit zwischen Herausgebern und Abonnenten. Um ein Thema abonnieren zu können, muss zunächst ein neuer Abonnent erstellt werden, bevor die Nachrichten des Herausgebers genutzt werden können.
  • Um Nachrichten zu konsumieren, muss der Abonnent aktiv bleiben.

Um solche strengen Zeitabhängigkeiten zu lockern, ermöglicht JMS einem Abonnenten, ein dauerhaftes Abonnement zu erstellen. Auf diese Weise kann der Abonnent auch dann Nachrichten vom Herausgeber empfangen, wenn er nicht aktiviert (ausgeführt) ist.

Wenn Sie möchten, dass die gesendete Nachricht in keiner Weise verarbeitet wird oder nur von einem Absender oder von mehreren Verbrauchern verarbeitet wird, können Sie das Pub/Sub-Modell verwenden.

Grundlegende Komponenten von JMS-Nachrichten

VerbindungsFactory

Es gibt zwei Fabriken zum Erstellen von Verbindungsobjekten: QueueConnectionFactory und TopicConnectionFactory für zwei verschiedene JMS-Nachrichtenmodelle. Das ConnectionFactory-Objekt kann über JNDI gefunden werden.

Ziel

Ziel bezeichnet das Ziel der Nachrichten der Nachrichtenproduzenten bzw. die Quelle der Nachrichten für Nachrichtenkonsumenten. Für einen Nachrichtenproduzenten ist das Ziel eine Warteschlange oder ein Thema. Für einen Nachrichtenkonsumenten ist das Ziel ebenfalls eine Warteschlange oder ein Thema (also die Quelle der Nachricht).

Daher besteht das Ziel eigentlich aus zwei Objekttypen: Warteschlange und Thema. Das Ziel kann über JNDI gefunden werden.

Verbindung

Die Verbindung stellt die zwischen dem Client und dem JMS-System hergestellte Verbindung dar (ein Wrapper für einen TCP/IP-Socket). Eine Verbindung kann eine oder mehrere Sitzungen generieren. Wie ConnectionFactory hat auch Connection zwei Typen: QueueConnection und TopicConnection.

Sitzung

Eine Sitzung ist eine Schnittstelle zum Bedienen von Nachrichten. Produzenten, Konsumenten, Nachrichten usw. können durch Sitzungen erstellt werden. Die Sitzung bietet Transaktionsfunktionalität. Wenn Sie eine Sitzung zum Senden/Empfangen mehrerer Nachrichten verwenden müssen, können Sie diese Sende-/Empfangsaktionen in eine Transaktion einfügen. Ebenso wird es in QueueSession und TopicSession unterteilt.

Produzent der Nachricht

Ein Nachrichtenproduzent wird von einer Sitzung erstellt und zum Senden von Nachrichten an ein Ziel verwendet. Ebenso gibt es zwei Arten von Nachrichtenproduzenten: QueueSender und TopicPublisher. Sie können die Methode des Nachrichtenproduzenten (Sende- oder Veröffentlichungsmethode) aufrufen, um Nachrichten zu senden.

Nachrichtenkonsument

Nachrichtenkonsumenten werden von der Sitzung erstellt, um an das Ziel gesendete Nachrichten zu empfangen. Zwei Typen: QueueReceiver und TopicSubscriber. Es kann über „createReceiver(Queue)“ bzw. „createSubscriber(Topic)“ der Sitzung erstellt werden. Natürlich können Sie auch die Methode createDurableSubscriber der Sitzung verwenden, um einen dauerhaften Abonnenten zu erstellen.

Nachrichtenlistener

Nachrichtenlistener. Wenn ein Nachrichten-Listener registriert ist, wird die onMessage-Methode des Listeners automatisch aufgerufen, sobald eine Nachricht eintrifft. MDB (Message-Driven Bean) in EJB ist eine Art MessageListener.

Transport

ActiveMQ unterstützt derzeit die folgenden Transportarten: VM-Transport, TCP-Transport, NIO-Transport, SSL-Transport, Peer-Transport, UDP-Transport, Multicast-Transport, HTTP- und HTTPS-Transport, WebSockets-Transport, Failover-Transport, Fanout-Transport, Discovery-Transport, ZeroConf-Transport usw.

  • VM-Transport: Ermöglicht dem Client und Broker, direkt innerhalb der VM zu kommunizieren. Die verwendete Verbindung ist keine Socket-Verbindung, sondern ein direkter Methodenaufruf, wodurch der Overhead der Netzwerkübertragung vermieden wird. Das Anwendungsszenario ist außerdem auf den Broker und den Client in derselben JVM-Umgebung beschränkt.
  • TCP-Transport: Der Client stellt über einen TCP-Socket eine Verbindung zum Remote-Broker her. Konfigurationssyntax:
  • tcp://Hostname:Port?Transportoptionen
  • HTTP- und HTTPS-Transport: Ermöglicht Clients die Verbindung über REST oder Ajax. Dies bedeutet, dass es möglich ist, mithilfe von Javascript direkt Nachrichten an ActiveMQ zu senden.
  • WebSockets-Transport: Ermöglicht Clients, über HTML5-Standard-WebSockets eine Verbindung zum Broker herzustellen.
  • Failover-Transport: Qinglong System MQ verwendet diese Verbindungsmethode. Diese Methode verfügt über einen automatischen Wiederverbindungsmechanismus und arbeitet auf anderen Transportschichten, um eine zuverlässige Übertragung sicherzustellen. Es ist zulässig, eine beliebige Anzahl von URIs zu konfigurieren. Der Mechanismus wählt automatisch eine davon für den Verbindungsversuch aus. Konfigurationssyntax:
  • Failover:(tcp://localhost:61616,tcp://localhost:61617,.....)?Transportoptionen
  • Fanout-Transport: Hauptsächlich zum Senden von Produktionsnachrichten an mehrere Agenten geeignet. Wenn mehrere Broker über Schleifen verfügen, erhalten Verbraucher möglicherweise doppelte Nachrichten. Daher ist es bei Verwendung dieses Protokolls am besten, Nachrichten an mehrere nicht verbundene Broker zu senden.

Persistenz

AMQ-Nachrichtenspeicher

Die standardmäßige persistente Speichermethode von ActiveMQ 5.0.

Kaha-Beständigkeit

Dies ist eine Lösung speziell für die Nachrichtenpersistenz. Es ist für typische Messaging-Nutzungsmuster optimiert.

JDBC-Persistenz

Derzeit unterstützte Datenbanken sind: Apache Derby, Axion, DB2, HSQL, Informix, MaxDB, MySQL, Oracle, Postgresql, SQLServer, Sybase.

Persistenz deaktivieren

Es wird kein dauerhafter Speicher verwendet.

Cluster-Lösung (Master / Slave)

Reiner Master-Sklave

  • Kein einzelner Ausfallpunkt;
  • Sie sind nicht auf gemeinsam genutzte Dateisysteme oder Datenbanken angewiesen. Verwenden Sie KahaDB zur dauerhaften Speicherung.
  • Ein Master kann nur einen Slave haben;
  • Während des Betriebs des Masters wird der Nachrichtenstatus automatisch mit dem Slave synchronisiert;
  • Sobald der Master abstürzt, übernimmt der Slave automatisch seine Arbeit und die gesendeten, aber noch nicht verbrauchten Nachrichten sind weiterhin gültig.
  • Nachdem der Slave die Kontrolle übernommen hat, muss der Slave gestoppt werden, um den vorherigen Master neu zu starten.

Gemeinsam genutztes Dateisystem Master Slave

JDBC-Master-Slave

  • In Bezug auf die Konfiguration gibt es keinen Unterschied zwischen Master und Slave. Mehrere Broker, die eine Datenquelle gemeinsam nutzen, bilden einen JDBC-Master-Slave.
  • Der Broker, der zuerst die Ressource (Datenbanksperre) ergreift, wird zum Master, und andere Broker versuchen regelmäßig, die Ressource zu ergattern.
  • Sobald der Master abstürzt, beschlagnahmen andere Broker die Ressourcen, und nur einer wird erfolgreich sein und sofort zum Master werden. Selbst wenn der vorherige Master erfolgreich neu gestartet wird, kann er nur als Slave warten.

Installationsanweisungen

Zur Installation wird hier Docker verwendet, Abfrage des Docker-Images:

Docker-Suche ActiveMQ

Laden Sie das Docker-Image herunter:

Docker-Pull Webcenter/ActiveMQ

Erstellen und Ausführen des ActiveMQ-Containers:

docker run -d --name myactivemq -p 61617:61616 -p 8162:8161 webcenter/activemq

61616 ist der vom ActiveMQ-Container verwendete Port (61617 zugeordnet), 8161 ist der Port für die Webseitenverwaltung (extern 8162 zugeordnet).

Überprüfen Sie den erstellten Container. Wenn er vorhanden ist, war die Installation erfolgreich:

Docker PS

Sehen Sie sich die WEB-Verwaltungsseite an:

Geben Sie http://ip:8162 in den Browser ein, klicken Sie auf „ActiveMQ-Broker verwalten“ und verwenden Sie zum Anzeigen das Standardkonto/Passwort: admin/admin.

Zugangspasswort konfigurieren

Geben Sie den Docker-Container ein:

docker exec -it myactivemq /bin/bash

Legen Sie den Benutzernamen und das Passwort auf der Konsolenschnittstelle fest:

# Befindet sich im Stammverzeichnis conf-Verzeichnis vi jetty-realm.properties

# Passwort ändern# Benutzername: Passwort [,Rollenname ...]
Administrator: Administrator, Administrator

Konfigurieren des Verbindungskennworts

Bearbeiten Sie die Datei activemq.xml und platzieren Sie sie unter shutdownHooks.

<!-- Fügen Sie das Konto und das Passwort für den Zugriff auf ActiveMQ hinzu-->
<Plugins>
  <simpleAuthenticationPlugin>
    <Benutzer>
      <authenticationUser Benutzername="${activemq.username}" Passwort="${activemq.password}" Gruppen="Benutzer,Administratoren"/>
    </Benutzer>
  </simpleAuthenticationPlugin>
</plugins>

Ändern Sie die Datei credentials.properties in conf, um das Passwort festzulegen:

activemq.Benutzername=Administrator
activemq.password=123456
Gast.Passwort=123456

Vorsichtsmaßnahmen

Wenn es sich um einen Cloud-Server handelt, denken Sie daran, die entsprechenden Ports (61617/8160) zu öffnen.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Analyse der Integration der ActiveMQ-Nachrichtenwarteschlangentechnologie mit dem Spring-Prozess
  • Anwendungsbeispiele für die Java-Middleware ActiveMQ
  • Spring Boot-Tutorial: Verwenden von ActiveMQ zum Implementieren verzögerter Nachrichten
  • Detaillierte Erklärung zur Verwendung von ActiveMQ zur Implementierung von Nachrichtenwarteschlangen in PHP
  • Eine kurze Diskussion über Java-Nachrichtenwarteschlangen (ActiveMQ, RabbitMQ, ZeroMQ, Kafka)
  • Python-Beispiel zum Senden und Empfangen von ActiveMQ-Nachrichten
  • Spring integriert JMS, um das synchrone Senden und Empfangen von Nachrichten zu realisieren (basierend auf der ActiveMQ-Implementierung)
  • Detaillierte Erläuterung der Java-Nachrichtenwarteschlangen-Spring-Integration von ActiveMq
  • Detaillierte Erläuterung des Codebeispiels für den ActiveMQ-Nachrichtenempfangsmechanismus

<<:  MySQL 5.6.28 Installations- und Konfigurations-Tutorial unter Linux (Ubuntu)

>>:  Detaillierte Erläuterung des Datenreaktionsprinzips von Vue

Artikel    

Artikel empfehlen

Detaillierte Erläuterung der TCPdump-Befehlsbeispiele in Linux

Vorwort Einfach ausgedrückt ist tcpdump ein Paket...

Ein einfaches Beispiel für die MySQL-Suche nach Daten im Umkreis von N Kilometern

Gemäß dem Koeffizienten von Pi und dem Radius der...

Installationsschritte von Docker-CE auf dem Raspberry Pi 4b Ubuntu19-Server

Das Raspberry Pi-Modell ist 4b, 1 G RAM. Das Syst...

Wie setze ich eine Unterstreichung in HTML? So unterstreiche ich Text in HTML

Früher bestand das Unterstreichen in HTML darin, ...

Tipps zum Organisieren von Zeichenfolgen in Linux

Bei Linux-Operationen ersetzen und zählen wir häu...

Beispielcode zur Implementierung eines reinen CSS-Popup-Menüs mit Transform

Vorwort Wenn Sie ein Topmenü erstellen, müssen Si...

Quellcodeanalyse des Nodejs-Modulsystems

Inhaltsverzeichnis Überblick CommonJS-Spezifikati...

Implementierungscode der Front-End-HTML-Skin-Änderungsfunktion

50 Zeilen Code zum Ändern von 5 Hautfarben, einsc...

Implementierungscode der CSS-Formularvalidierungsfunktion

Rendern Prinzip Im Formularelement gibt es ein Mu...

6 ungewöhnliche HTML-Tags

Zuerst: <abbr> oder <acronym> Diese be...

Beispiel zum schnellen Löschen einer 2T-Tabelle in MySQL in Innodb

Vorwort Dieser Artikel stellt hauptsächlich den r...