Vorlesung 01: Erste Schritte mit RocketMQ

1. Was ist eine Nachrichtenwarteschlange?

​ Die Middleware für Nachrichtenwarteschlangen ist eine wichtige Komponente in verteilten Systemen und löst hauptsächlich Probleme wie Anwendungskopplung, asynchrone Nachrichten und Verkehrsaufteilung. Erreichen Sie hohe Leistung, hohe Verfügbarkeit, Skalierbarkeit und schließlich eine konsistente Architektur. Es ist eine unverzichtbare Middleware für große verteilte Systeme. Zu den derzeit in Produktionsumgebungen am häufigsten verwendeten Nachrichtenwarteschlangen gehören ActiveMQ, RabbitMQ, ZeroMQ, Kafka, MetaMQ, RocketMQ usw.

Offizielle Homepage:RocketMQ · Offizielle Website | RocketMQ

Offizielle Dokumente:RocketMQ · Offizielle Website | RocketMQ

Download-Link:Zum Herunterladen klicken

Visualisierungstool:Zum Herunterladen klicken

1.1. Anwendungsszenarien

  1. Asynchrone Verarbeitung
  2. Reduzierung von Verkehrsspitzen und Talfüllung (z. B. Flash-Verkäufe)
  3. Entkopplung von Microservices

1.2. Vergleich gängiger MQ-Produkte

Fügen Sie hier eine Bildbeschreibung ein

1.3. Warum RocketMQ wählen?

Der erste Punkt besteht darin, Sprachvorteile zu entwickeln.

​ RocketMQ wurde mit der Java-Sprache entwickelt. Im Vergleich zu RabbitMQ, das mit Erlang entwickelt wurde, bietet es ein zugänglicheres Leseerlebnis und eine bessere Zielgruppe. Bei Problemen auf niedrigerer Ebene mit RocketMQ können die meisten Studenten, die mit Java vertraut sind, den Quellcode eingehend lesen, Probleme analysieren und beheben und dies sogar auf der Grundlage der Community-Version tun二次开发.

Zweiter Punkt, umfangreiche erweiterte Funktionen.

​ Laut der Liste der offiziellen Dokumente von RocketMQ haben seine erweiterten Funktionen 12 种 erreicht, wie z. B. sequentielle Nachrichten, Transaktionsnachrichten, Nachrichtenfilterung, geplante Nachrichten usw. Die umfangreichen Funktionen von RocketMQ können uns in komplexen Geschäftsszenarien so viele Ideen und Lösungen wie möglich liefern.

Der dritte Punkt sind gute Geschäftsaussichten.

​ Beispielsweise hat Alibaba 数百个 RocketMQ 集群,上千个节点 in seiner Produktionsumgebung bereitgestellt. Eine so große Anzahl von RocketMQ-Anwendungen in der Produktionsumgebung reicht aus, um zu zeigen, dass RocketMQ dem Test tatsächlich standhalten kann grausame Produktionsumgebung. und kann entsprechende Lösungen für komplexe Nachfrageszenarien im Online-Umfeld bereitstellen.

​ RocketMQ erfüllt nicht nur die internen Anforderungen von Alibaba, sondern wurde auch in die Alibaba Cloud verlagert, um externe Dienste als商业化的产品 bereitzustellen. Das Produkt in Alibaba Cloud heißt „Message Queue RocketMQ Edition“. Seit seiner Kommerzialisierung im Jahr 2016 hat die kommerzielle Version von RocketMQ einen beträchtlichen Umfang erreicht. 良好的商业前景,也反向推动着 RocketMQ 在业界的普及,两者相辅相成、相得益彰。

Der vierte Punkt ist, dass viele große Hersteller es unterstützen.

​ RocketMQ ist mittlerweile weit verbreitet im internen Geschäft verschiedener großer Hersteller. Es versteht sich von selbst, dass Alibaba, der Ort, an dem es geboren wurde, im Laufe der Jahre大家所熟悉的双十一促销,在阿里内部就是使用的 RocketMQ 来承载消息 mit einem solchen Problem konfrontiert wurde Aufgrund der enormen lieferte RocketMQ eine zufriedenstellende Antwort. Verkehrsspitze

​ Ein weiteres Beispiel: RocketMQ ist auch das Kernprodukt in AlibabaTransaction Link. Der Transaktionslink ist bereits der Kern des Kerns, und dieser Kern betrachtet RocketMQ als den Kern des Kernlinks, was ausreicht, um die Bedeutung zu zeigen, die er RocketMQ beimisst. Gleichzeitig nutzen auch 字节跳动verschiedene interne Unternehmen RocketMQ in großem Umfang. Als Kernkomponente im Hauptgeschäftsprozess sorgt RocketMQ für sehr hohe Stabilität und Verfügbarkeit< /span> unterstützt den Betrieb und die Entwicklung des Unternehmens sehr gut.

2. So verwenden Sie RocketMQ

2.1. Erstellen Sie RocketMQ

2.1.1. Laden Sie Apache RocketMQ herunter und installieren Sie es

Die in diesem Blog verwendete Version von Rocket MQ ist:rocketmq-all-5.0.0-bin-release. Bei Bedarf können Sie Sie können es selbst herunterladen oder einen Blogger suchen

2.1.2. Umgebungsvariablen konfigurieren

ROCKETMQ_HOME lokaler Dekomprimierungspfad

Fügen Sie hier eine Bildbeschreibung ein

NAMESRV_ADDR localhost:9876

Fügen Sie hier eine Bildbeschreibung ein

2.1.3. Starten Sie mqnamesrv

Führen Sie PowerShell als Administrator aus, sonst stürzt der Dienst ab! ! !

Wenn die folgende Eingabeaufforderung erscheint, wurde der Dienst erfolgreich gestartet und Sie können mit dem nächsten Schritt fortfahren.

Fügen Sie hier eine Bildbeschreibung ein

2.1.4. Starten Sie mqbroker

Fügen Sie hier eine Bildbeschreibung ein

2.2. Erstellen Sie eine RocketMQ-Konsole

Laden Sie das ZIP-Paket des Visualisierungstools herunter, dekomprimieren Sie es lokal und öffnen Sie es mit IDEA

Fügen Sie hier eine Bildbeschreibung ein

Führen Sie den Browser aus und besuchen Sie http://localhost:8080/

Fügen Sie hier eine Bildbeschreibung ein

Referenz zur Konsolennutzungsanleitung:https://github.com/eacdy/rocketmq-externals/blob/master/rocketmq-console/doc/1_0_0/UserGuide_CN.md< / a>

3. SpringBoot integriert RocketMQ

SpringBoot-Version: 2.7.4

3.1、pom.xml

<!--RocketMQ坐标-->
<dependency>
	<groupId>org.apache.rocketmq</groupId>
	<artifactId>rocketmq-spring-boot-starter</artifactId>
	<version>2.2.1</version>
</dependency>

3.2、application.yml

server:
  port: 8083
rocketmq:
  #RocketMQ Namesrv
  name-server: 127.0.0.1:9876
  producer:
    #生产者分组,RocketMQ必填项,字符可随意
    group: test_mq
    #发送消息超时时间,单位:毫秒。默认为 3000
    send-message-timeout: 3000
    #消息压缩阀值,当消息体的大小超过该阀值后,进行消息压缩。默认为 4 * 1024B
    compress-message-body-threshold: 4096
    #消息体的最大允许大小。。默认为 4 * 1024 * 1024B
    max-message-size: 4194304
    #同步发送消息时,失败重试次数。默认为 2 次。
    retry-times-when-send-failed: 2
    #异步发送消息时,失败重试次数。默认为 2 次。
    retry-times-when-send-async-failed: 2
    #发送消息给 Broker 时,如果发送失败,是否重试另外一台 Broker 。默认为 false
    retry-next-server: false

3.3. Schreibende Produzenten

package com.rocket.rocketdemo.controller;

import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
    
    

    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    /**
     * 发送普通消息
     * convertAndSend(String destination, Object payload) 发送字符串比较方便
     */
    @RequestMapping("/send")
    public void send(){
    
    
        //参数一:topic
        //参数二:消息内容
        rocketMQTemplate.convertAndSend("test1","test-message");
    }

    /**
     * 发送同步消息
     * Tip:该方法底层调用的是 producer.send()方法,是阻塞的,producer 一定要等到Broker进行了响应后才会返回,才能继续往下执行。如果超时,或者失败了,会触发两次默认的重试。
     */
    @RequestMapping("/testSyncSend")
    public void testSyncSend(){
    
    
        //参数一:topic
        //参数二:消息内容
        SendResult sendResult = rocketMQTemplate.syncSend("test1","同步消息测试");
        System.out.println(sendResult);
    }

    /**
     * 发送异步消息
     * Tip:该方法是非阻塞的,发送结果将由一个回调函数callback进行回调。它与同步发送消息的区别是它在发送消息时多传递了一个SendCallback对象,该方法一调用立马返回,而不需要等待Broker的响应返回。消息发送成功或失败后将回调SendCallback对象的对应方法。
     */
    @RequestMapping("/testASyncSend")
    public void testASyncSend(){
    
    
        //参数一:topic
        //参数二:消息内容
        //参数三:回调
        rocketMQTemplate.asyncSend("test1", "异步消息测试", new SendCallback() {
    
    
            @Override
            public void onSuccess(SendResult sendResult) {
    
    
                System.out.println(sendResult);
            }
            @Override
            public void onException(Throwable throwable) {
    
    
                System.out.println("消息发送异常");
                throwable.printStackTrace();
            }
        });
    }

    /**
     * 发送单向消息
     * Tip:它的发送是单向的,即它不需要等待Broker的响应,只管发送即可,而不论发送成功与失败。通常应用于一些消息不是那么重要,可丢失的场景。
     */
    @RequestMapping("/testOneWay")
    public void testOneWay(){
    
    
        for (int i = 0; i <10 ; i++) {
    
    
            //参数一:topic   如果想添加tag,可以使用"topic:tag"的写法
            //参数二:消息内容
            rocketMQTemplate.sendOneWay("test1","单向消息测试测试下"+i);
        }
    }
}

3.4. Schreiben Sie Verbraucher

package com.rocket.rocketdemo.config;

import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Service;

@Service
//consumerGroup与application.yml中rocketmq.producer.group值一致
//topic与消息生产者发送的消息topic一致
@RocketMQMessageListener(consumerGroup = "test_mq",topic = "test1")
public class RocketMQConsumerListener implements RocketMQListener<String> {
    
    
    @Override
    public void onMessage(String s) {
    
    
        System.out.println("消费消息:"+s);
    }
}

3.5. Testen

Um synchrone Nachrichten zu senden, verwenden Sie Postman zum Senden von Anfragen http://localhost:8083/send

Konsoleneffekt:

Fügen Sie hier eine Bildbeschreibung ein

Um asynchrone Nachrichten zu senden, verwenden Sie Postman zum Senden von Anfragen http://localhost:8083/testSyncSend

Konsoleneffekt:

Fügen Sie hier eine Bildbeschreibung ein

Supongo que te gusta

Origin blog.csdn.net/qzc70919700/article/details/130703093
Recomendado
Clasificación