Implementierungsbeispiel für die Bereitstellung von Docker rocketmq

Implementierungsbeispiel für die Bereitstellung von Docker rocketmq

Ich habe vor Kurzem gelernt, RocketMQ zu verwenden, und musste einen RocketMQ-Server erstellen. Dieser Artikel beschreibt hauptsächlich den RocketMQ-Erstellungsprozess und einige der dabei auftretenden Fallstricke.

Vorbereitung

Vor dem Erstellen müssen wir einige Vorbereitungen treffen. Hier müssen wir Docker verwenden, um den Dienst zu erstellen, daher müssen wir Docker im Voraus installieren. Da RocketMQ außerdem die Bereitstellung eines Brokers und eines Nameservers erfordert und die separate Bereitstellung problematisch ist, wird hier Docker-Compose verwendet.

Das RocketMQ-Architekturdiagramm sieht wie folgt aus:

Darüber hinaus müssen Sie auch eine Webvisualisierungskonsole erstellen, um den MQ-Dienststatus und den Nachrichtenverbrauch zu überwachen. Hier wird die Rocketmq-Konsole verwendet und das Programm wird auch mit Docker installiert.

Bereitstellungsprozess

Zuerst benötigen wir das Rocketmq-Docker-Image. Hier können wir es selbst erstellen, direkt [email protected]:apache/rocketmq-docker.git abrufen und dann das Image erstellen. Sie können das offizielle Image auch direkt auf Docker Hub verwenden, der Imagename lautet: rocketmqinc/rocketmq .

Erstellen Sie als Nächstes die MQ-Konfigurationsdatei broker.conf und platzieren Sie sie in /opt/rocketmq/conf . Die Konfiguration sieht wie folgt aus:

brokerClusterName = StandardCluster  
Brokername = Broker-A  
Broker-ID = 0  
löschenWenn = 04  
DateiReservierteZeit = 48  
Brokerrolle = ASYNC_MASTER  
FlushDiskType = ASYNC_FLUSH  
# Wenn das lokale Programm den Cloud-Host mq aufruft, muss dies auf die Cloud-Host-IP eingestellt werden
brokerIP1=10.10.101.80

Erstellen Sie die folgenden Ordner: /opt/rocketmq/logs , /opt/rocketmq/store und erstellen Sie abschließend die Datei docker-compose.yml mit der folgenden Konfiguration:

Version: '2'
Leistungen:
  Nameserver:
    Bild: rocketmqinc/rocketmq
    Containername: rmqnamesrv
    Häfen:
      -9876:9876
    Bände:
      – /opt/rocketmq/logs:/home/rocketmq/logs
      - /opt/rocketmq/store:/home/rocketmq/store
    Befehl: sh mqnamesrv
  Makler:
    Bild: rocketmqinc/rocketmq
    Containername: rmqbroker
    Häfen:
      - 10909:10909
      - 10911:10911
      - 10912:10912
    Bände:
      – /opt/rocketmq/logs:/home/rocketmq/logs
      - /opt/rocketmq/store:/home/rocketmq/store
      - /opt/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf
    #Befehl: sh mqbroker -n namesrv:9876
    Befehl: sh mqbroker -n namesrv:9876 -c ../conf/broker.conf
    hängt ab von:
      -namerv
    Umfeld:
      -JAVA_HOME=/usr/lib/jvm/jre
  Konsole:
    Bild: styletang/rocketmq-console-ng
    Containername: rocketmq-console-ng
    Häfen:
      -8087:8080
    hängt ab von:
      -namerv
    Umfeld:
      -JAVA_OPTS= -Dlogging.level.root=info -Drocketmq.namesrv.addr=rmqnamesrv:9876 
      - Dcom.rocketmq.sendMessageWithVIPChannel=false

Notiz

Es ist hier zu beachten, dass sowohl der RocketMQ-Broker als auch die RokcetMQ-Konsole eine Verbindung zum RokcetMQ-Nameserver herstellen müssen und Sie die IP des Nameservers kennen müssen. Nach der Verwendung von Docker-Compose werden die oben genannten drei Docker-Container zusammen orchestriert. Sie können den Containernamen direkt anstelle der Container-IP verwenden, z. B. den Nameserver-Containernamen rmqnamesrv.

Führen Sie nach Abschluss der Konfiguration docker-compose up aus, um die drei Container zu starten. Rufen Sie nach dem erfolgreichen Start die IP-Adresse 8087 auf und überprüfen Sie die externe MQ-Konsole. Wenn Sie die folgenden Informationen sehen, wurde der RocketMQ-Dienst erfolgreich gestartet.

Erste Erfahrungen mit RocketMQ

Hier verwenden wir Springboot, um schnell mit MQ zu beginnen, und verwenden das Modul rocketmq-spring-boot-starter . Die POM-Konfiguration ist wie folgt:

<!--Abhängigkeiten in pom.xml hinzufügen-->
<Abhängigkeit>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>2.0.3</version>
</Abhängigkeit>

Der Consumer-Service-Absender ist wie folgt konfiguriert:

## Anwendungseigenschaften
rocketmq.name-server=ip:9876
rocketmq.producer.group=meine-Gruppe

Das Verfahren für den Absender des Verbraucherservice läuft wie folgt ab:

@SpringBootAnwendung
öffentliche Klasse ProducerApplication implementiert CommandLineRunner {
    @Ressource
    privates RocketMQTemplate rocketMQTemplate;

    öffentliche statische void main(String[] args){
        SpringApplication.run(ProducerApplication.class, args);
    }

    public void run(String...args) löst Exception aus {
        rocketMQTemplate.convertAndSend("test-topic-1", "Hallo Welt!");
        rocketMQTemplate.send("test-topic-1", MessageBuilder.withPayload("Hallo Welt! Ich komme von Spring Message").build());
    }

}

Die Konfiguration des Nachrichtenkonsumenten sieht wie folgt aus:

## Anwendungseigenschaften
rocketmq.name-server=ip:9876

Der Nachrichtenkonsument führt das folgende Programm aus:

@SpringBootAnwendung
öffentliche Klasse ConsumerApplication{

    öffentliche statische void main(String[] args){
        SpringApplication.run(ConsumerApplication.class, args);
    }

    @Slf4j
    @Service
    @RocketMQMessageListener(Thema = "Testthema-1", Verbrauchergruppe = "Mein Verbraucher_Testthema-1")
    öffentliche statische Klasse MyConsumer1 implementiert RocketMQListener<String> {
        public void onMessage(String message) {
            log.info("empfangene Nachricht: {}", Nachricht);
        }
    }
}

Verwandte Fragen

Beim Absender der Nachricht Caused by: org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout .

Diese Ausnahme wird dadurch verursacht, dass die Broker-IP nicht richtig eingestellt ist. Melden Sie sich bei der MQ-Servicekonsole an, um die Broker-Konfigurationsinformationen anzuzeigen.

Über 192.168.128.3:10911 steht die IP des Docker-Containers, also eine interne IP des Hosts. Hier müssen Sie die IP auf die IP des Cloud-Hosts einstellen und brokerIP1 in broker.conf ändern.

Die MQ-Konsole kann die MQ-Dienstinformationen nicht normal anzeigen.

Dieses Problem wird hauptsächlich durch falsche Nameserver-IP-Einstellungen verursacht. Überprüfen Sie die Betriebs- und Wartungsseite der MQ-Konsole, um die aktuell verbundenen Nameserver-Adressinformationen anzuzeigen.

Sie können sehen, dass hier die Adresse 127.0.0.1:9876 festgelegt ist. Da die MQ-Konsole hier einen Docker-Container verwendet, wird beim direkten Zugriff auf 127.0.0.1:9876 im Container auf den Container selbst zugegriffen und nicht auf das richtige Programm auf dem Hostcomputer.

Hier müssen Sie die Umgebungsvariablen in Docker konfigurieren. Die Konfiguration ist wie folgt:

-JAVA_OPTS= -Dlogging.level.root=info -Drocketmq.namesrv.addr=rmqnamesrv:9876

Hilfedokumentation

RocketMQ-Docker
RocketMq-Docker-Aufbau und grundlegende Konzepte
RocketMQ-Frühling

Autor:Leo_wl

Quelle: http://www.cnblogs.com/Leo_wl/

Dies ist das Ende dieses Artikels über das Implementierungsbeispiel der Docker RocketMQ-Bereitstellung. Weitere relevante Inhalte zur Docker RocketMQ-Bereitstellung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Von RocketMQ entwickelter Fehlervermeidungsmechanismus
  • Probleme mit der Verarbeitungsstrategie für RabbitMQ, RocketMQ, Kafka-Transaktionen, Nachrichtenverlust, Nachrichtensequenz und Nachrichtenduplizierung
  • Asynchrones Leeren der Festplatte im RocketMQ-Design
  • RocketMQ entwirft synchrones Datenträger-Leeren
  • RocketMQ-Design: Master-Slave-Replikation und Lese-/Schreibtrennung

<<:  Sollte ich für das mobile Web-WAP Bootstrap oder jQuery Mobile verwenden?

>>:  So verstehen Sie den Unterschied zwischen ref toRef und toRefs in Vue3

Artikel empfehlen

So konfigurieren Sie /var/log/messages im Ubuntu-Systemprotokoll

1. Problembeschreibung Heute muss ich die Systemp...

Die umfassendste Sammlung von Front-End-Interviewfragen

HTML und CSS 1. Verständnis und Kenntnisse von WE...

Detaillierte Anwendungsfälle von MySql Escape

MySQL-Escape Escape bedeutet die ursprüngliche Se...

Verwendung des Array-Filters filter() in JS

Inhaltsverzeichnis 1. Einleitung 2. Einführung in...

Tipps zur Kurzschrift in JavaScript

Inhaltsverzeichnis 1. Arrays zusammenführen 2. Ar...

mysql ist keine interne Befehlsfehlerlösung

Der Fehler „mysql ist kein interner Befehl“ tritt...

Einfaches Tutorial zur Verwendung von Navicat für MySQL

empfehlen: Detailliertes Tutorial zur Registrieru...

Optimierung der MySQL 4G-Speicherserverkonfiguration

Da die Anzahl der Besuche auf der Website des Unt...

HTML- und CSS-Grundlagen (unbedingt lesen)

(1) HTML: HyperText Markup Language, die im Wesen...

Detaillierte Erläuterung der benutzerdefinierten Vue-Anweisungen

Inhaltsverzeichnis Benutzerdefinierte Vue-Direkti...