Inhaltsverzeichnis
1. Nutzungsszenarien
2. Antwort in Aktion
(1) Abhängigkeiten und YML-Konfiguration
(2) RabbitMq-Bean-Konfiguration
(3) Ende der Nachrichtenproduktion
(4) Nachrichtenkonsumentenseite
(1) Methode eins: sendTo-Annotation + Methodenrückgabe value
(2) Methode 2: Lesen Sie die Nachricht vom Produktionsende und senden Sie sie mithilfe einer Vorlage
Heim Java javaLernprogramm So implementieren Sie den Direktantwortmodus für Springboot RabbitMQ-Antwortnachrichten

So implementieren Sie den Direktantwortmodus für Springboot RabbitMQ-Antwortnachrichten

May 11, 2023 am 11:58 AM
springboot rabbitmq reply

1. Nutzungsszenarien

Zu den Funktionen von MQ gehören Entkopplung, Asynchronität usw.

Normalerweise sind Produzenten nur für die Erstellung von Nachrichten verantwortlich und kümmern sich nicht darum, wer die Nachrichten erhält oder was die Konsumergebnisse sind; Verbraucher sind nur für den Empfang bestimmter Nachrichten für die Geschäftsverarbeitung verantwortlich und kümmern sich nicht darum, woher die Nachrichten kommen und auf das Unternehmen reagieren Bearbeitungsstand. In unserem Projekt gibt es jedoch ein besonderes Geschäft. Als Nachrichtenproduzent müssen wir das Antwortergebnis des Verbrauchers nach der Erstellung der Nachricht erhalten (um es ganz klar auszudrücken: Es ähnelt der Verwendung einer synchronen Anrufanforderungsantwort durch MQ). Für dieses Geschäftsmodell wurde der Antwortmodus (Direktantwortmodell) von MQ entwickelt.

2. Antwort in Aktion

(1) Abhängigkeiten und YML-Konfiguration

Abhängigkeiten:

Ich liste nur die für RabbitMq erforderlichen Kernabhängigkeiten auf

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
Nach dem Login kopieren

Konfiguration:

Keine andere spezielle Konfiguration, da die Antwort lautet nur eine interaktive Methode von RabbitMq

spring:
  rabbitmq:
    host: 10.50.40.116
    port: 5673
    username: admin
    password: admin
Nach dem Login kopieren

(2) RabbitMq-Bean-Konfiguration

package com.leilei.demo;

import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @author lei
 * @create 2022-09-19 21:44
 * @desc mq配置
 **/
@Configuration
public class RabbitMqConfig {
    @Bean
    public Queue bizQueue() {
        return new Queue("bizQueue");
    }
    @Bean
    public Queue replyQueue() {
        return new Queue("replyQueue");
    }
    @Bean
    FanoutExchange bizExchange() {
        return new FanoutExchange("bizExchange");
    }
}
Nach dem Login kopieren

Business-Klasse:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Vehicle implements Serializable {
    private Integer id;
    private String name;
}
Nach dem Login kopieren

(3) Ende der Nachrichtenproduktion

Dinge, die das Ende der Nachrichtenproduktion tun muss: Nachrichten produzieren und diese akzeptieren Nachricht Verbrauchsantwort

(1) Nachricht erstellen

  • 1. Wählen Sie je nach Geschäftsszenario aus, ob eine global eindeutige benutzerdefinierte Nachrichten-ID generiert werden soll

  • 2. Geben Sie die Warteschlange für die Antwort nach dem Nachrichtenverbrauch an (Antwort)

    /**
     * 生产消息
     *
     * @param
     * @return void
     * @author lei
     * @date 2022-09-19 21:59:18
     */
    public void replySend() {
        MessageProperties messageProperties = new MessageProperties();
        messageProperties.setReplyTo("replyQueue");
        //todo 根据业务,做一个严谨的全局唯一ID,我这里暂时用UUID
        String correlationId = UUID.randomUUID().toString();
        // 我这里指定了唯一消息ID,看业务场景,消费者消费响应后,生产者端可根据消息ID做业务处理
        messageProperties.setCorrelationId(correlationId);
        Vehicle vehicle = new Vehicle(1, "川A0001");
        Message message = new Message(JSON.toJSONString(vehicle).getBytes(), messageProperties);
        rabbitTemplate.convertAndSend("bizExchange","",message);
        System.out.println("生产者发送消息,自定义消息ID为:" + correlationId);
    }
Nach dem Login kopieren

(2) Akzeptieren Sie die Antwortantwort

Nachdem der Verbraucher die Nachricht konsumiert hat, wird das Verarbeitungsergebnis an eine Warteschlange gesendet, um das entsprechende Antwortergebnis zu erhalten Nachricht für die Geschäftsverarbeitung

    /**
     * 接收消息响应
     *
     * @param message
     * @return void
     * @author lei
     * @date 2022-09-19 21:59:27
     */
    @RabbitListener(queues = "replyQueue")
    public void replyResponse(Message message) {
        String s = new String(message.getBody());
        String correlationId = message.getMessageProperties().getCorrelationId();
        System.out.println("收到客户端响应消息ID:" + correlationId);
        //todo 根据消息ID可判断这是哪一个消息的响应,我们就可做业务操作
        System.out.println("收到客户端响应消息:" + s);
    }
Nach dem Login kopieren

(4) Nachrichtenkonsumentenseite

Was der Nachrichtenkonsument tun muss, ist: die Nachricht akzeptieren und dann die Geschäftsverarbeitung durchführen und auf die Nachricht antworten

(1) Methode eins: sendTo-Annotation + Methodenrückgabe value

Im Allgemeinen benötigen wir für die Listener-Methode keinen Rückgabewert. Wir verwenden hier die Annotation „sendTo“, und die zu beantwortende Nachricht muss als Rückgabewert definiert werden to

Wichtige Punkte:

  • 1 Die sendTo-Annotation gibt die entsprechende Warteschlange an (beachten Sie, dass sie mit dem Produktionsende übereinstimmt)

  • 2. Der durch die Methode definierte Rückgabewertinhalt zu beantworten, die schließlich an die sendTo-Annotation gesendet wird, um die entsprechende Warteschlange anzugeben

  • 3 Diese Methode Der Nachteil besteht darin, dass die Verbraucherseite sehr wichtig ist, da die durch sendTo angegebene Zielwarteschlange blind geschrieben werden kann. Dies führt dazu, dass die Produzentenseite die Nachrichtenantwort nicht korrekt empfangen kann, aber ich glaube, dass dies bei allgemeinen Projekten nicht der Fall ist

    /**
     * 方式1   SendTo指定响应队列
     *
     * @param message
     * @return String
     * @author lei
     * @date 2022-09-19 16:17:52
     */
    @RabbitListener(queues ="bizQueue")
    @SendTo("replyQueue")
    public String handleEmailMessage(Message message) {
        try {
            String msg=new String(message.getBody(), StandardCharsets.UTF_8);
            log.info("---consumer接收到消息----{}",msg);
            return "客户端响应消息:"+msg+"处理完成!";
        } catch (Exception e) {
            log.error("处理业务消息失败",e);
        }
        return null;
    }
Nach dem Login kopieren
(2) Methode 2: Lesen Sie die Nachricht vom Produktionsende und senden Sie sie mithilfe einer Vorlage

Genau wie bei der normalen Verbrauchermethode benötigen Sie nur die RabbitListener-Annotation, um die Geschäftswarteschlange abzuhören. Sie müssen jedoch auch die ReplyTo-Adresse basierend auf der Nachricht abrufen und die Nachricht dann manuell innerhalb Ihrer eigenen Verbrauchermethode senden

  • 1. Vorteile: Sie können die Interaktivität von Nachrichtenanfragen und -antworten stärker spüren und der Prozess sieht klarer aus.

  • 2. Nachteile: Der Code ist unelegant. (3) Methode drei: Rückgabewert der Methode Diese Methode stimmt tatsächlich mit 1 überein, aber ich habe sie getestet. Da die Producer-Nachricht die Adresse von ReplyTo angibt, muss der Verbraucher sie nicht erneut manuell angeben, dh wo die Nachricht erstellt werden soll, ob sie antworten soll und wo Um die Antwortnachricht zu senden, ist das Produktionsende von selbst leer, und der Verbraucher muss nur sein eigenes Geschäft verarbeiten und Ergebnisse zurücksenden Antwort:

Erhaltene Antwort:

Link: springboot rabbitmq reply消息直接回复模式怎么实现

Das obige ist der detaillierte Inhalt vonSo implementieren Sie den Direktantwortmodus für Springboot RabbitMQ-Antwortnachrichten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So erstellen Sie eine zuverlässige Messaging-App mit React und RabbitMQ So erstellen Sie eine zuverlässige Messaging-App mit React und RabbitMQ Sep 28, 2023 pm 08:24 PM

So erstellen Sie eine zuverlässige Messaging-Anwendung mit React und RabbitMQ Einführung: Moderne Anwendungen müssen zuverlässiges Messaging unterstützen, um Funktionen wie Echtzeitaktualisierungen und Datensynchronisierung zu erreichen. React ist eine beliebte JavaScript-Bibliothek zum Erstellen von Benutzeroberflächen, während RabbitMQ eine zuverlässige Messaging-Middleware ist. In diesem Artikel wird erläutert, wie Sie React und RabbitMQ kombinieren, um eine zuverlässige Messaging-Anwendung zu erstellen, und es werden spezifische Codebeispiele bereitgestellt. RabbitMQ-Übersicht:

So verwenden Sie RabbitMQ, um die verteilte Nachrichtenverarbeitung in PHP zu implementieren So verwenden Sie RabbitMQ, um die verteilte Nachrichtenverarbeitung in PHP zu implementieren Jul 18, 2023 am 11:00 AM

So verwenden Sie RabbitMQ, um die verteilte Nachrichtenverarbeitung in PHP zu implementieren. Einführung: In der groß angelegten Anwendungsentwicklung sind verteilte Systeme zu einer häufigen Anforderung geworden. Die verteilte Nachrichtenverarbeitung ist ein Muster, das die Effizienz und Zuverlässigkeit des Systems verbessert, indem Aufgaben auf mehrere Verarbeitungsknoten verteilt werden. RabbitMQ ist ein zuverlässiges Open-Source-Nachrichtenwarteschlangensystem, das das AMQP-Protokoll verwendet, um die Nachrichtenzustellung und -verarbeitung zu implementieren. In diesem Artikel erfahren Sie, wie Sie RabbitMQ in PHP zur Verteilung verwenden

Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Dec 29, 2023 am 11:02 AM

SpringBoot und SpringMVC sind beide häufig verwendete Frameworks in der Java-Entwicklung, es gibt jedoch einige offensichtliche Unterschiede zwischen ihnen. In diesem Artikel werden die Funktionen und Verwendungsmöglichkeiten dieser beiden Frameworks untersucht und ihre Unterschiede verglichen. Lassen Sie uns zunächst etwas über SpringBoot lernen. SpringBoot wurde vom Pivotal-Team entwickelt, um die Erstellung und Bereitstellung von Anwendungen auf Basis des Spring-Frameworks zu vereinfachen. Es bietet eine schnelle und einfache Möglichkeit, eigenständige, ausführbare Dateien zu erstellen

Verwenden von RabbitMQ in Go: Eine vollständige Anleitung Verwenden von RabbitMQ in Go: Eine vollständige Anleitung Jun 19, 2023 am 08:10 AM

Da moderne Anwendungen immer komplexer werden, ist Messaging zu einem leistungsstarken Werkzeug geworden. In diesem Bereich hat sich RabbitMQ zu einem sehr beliebten Nachrichtenbroker entwickelt, mit dem Nachrichten zwischen verschiedenen Anwendungen übermittelt werden können. In diesem Artikel erfahren Sie, wie Sie RabbitMQ in der Go-Sprache verwenden. Dieses Handbuch behandelt Folgendes: Einführung in RabbitMQ RabbitMQ-Installation RabbitMQ-Grundkonzepte Erste Schritte mit RabbitMQ in Go RabbitMQ und Go

Praktisches Tutorial zur SpringBoot+Dubbo+Nacos-Entwicklung Praktisches Tutorial zur SpringBoot+Dubbo+Nacos-Entwicklung Aug 15, 2023 pm 04:49 PM

In diesem Artikel wird ein detailliertes Beispiel geschrieben, um über die tatsächliche Entwicklung von Dubbo + Nacos + Spring Boot zu sprechen. In diesem Artikel wird nicht zu viel theoretisches Wissen behandelt, sondern das einfachste Beispiel wird geschrieben, um zu veranschaulichen, wie Dubbo in Nacos integriert werden kann, um schnell eine Entwicklungsumgebung aufzubauen.

Lösung für die Echtzeit-Datensynchronisierung zwischen Golang und RabbitMQ Lösung für die Echtzeit-Datensynchronisierung zwischen Golang und RabbitMQ Sep 27, 2023 pm 10:41 PM

Einführung in die Lösung für die Echtzeit-Datensynchronisierung zwischen Golang und RabbitMQ: In der heutigen Zeit, mit der Popularität des Internets und dem explosionsartigen Wachstum des Datenvolumens, wird die Echtzeit-Datensynchronisierung immer wichtiger. Um die Probleme der asynchronen Datenübertragung und Datensynchronisierung zu lösen, haben viele Unternehmen damit begonnen, Nachrichtenwarteschlangen zu verwenden, um eine Echtzeitsynchronisierung von Daten zu erreichen. In diesem Artikel wird eine Echtzeit-Datensynchronisierungslösung basierend auf Golang und RabbitMQ vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Was ist RabbitMQ? Rabbi

Anwendungspraxis von Go-Zero und RabbitMQ Anwendungspraxis von Go-Zero und RabbitMQ Jun 23, 2023 pm 12:54 PM

Jetzt beginnen immer mehr Unternehmen, das Microservice-Architekturmodell zu übernehmen, und in dieser Architektur sind Nachrichtenwarteschlangen zu einer wichtigen Kommunikationsmethode geworden, unter denen RabbitMQ weit verbreitet ist. In der Go-Sprache ist Go-Zero ein Framework, das in den letzten Jahren entstanden ist. Es bietet Entwicklern eine einfachere Verwendung von Nachrichtenwarteschlangen. Im Folgenden werden wir Go-Zero anhand praktischer Anwendungen vorstellen und Anwendungspraxis von RabbitMQ. 1.RabbitMQ-ÜbersichtRabbit

Golang RabbitMQ: Architekturentwurf und Implementierung eines hochverfügbaren Nachrichtenwarteschlangensystems Golang RabbitMQ: Architekturentwurf und Implementierung eines hochverfügbaren Nachrichtenwarteschlangensystems Sep 28, 2023 am 08:18 AM

GolangRabbitMQ: Der architektonische Entwurf und die Implementierung eines hochverfügbaren Nachrichtenwarteschlangensystems erfordern spezifische Codebeispiele. Einführung: Mit der kontinuierlichen Entwicklung der Internettechnologie und ihrer breiten Anwendung sind Nachrichtenwarteschlangen zu einem unverzichtbaren Bestandteil moderner Softwaresysteme geworden. Als Werkzeug zur Erzielung von Entkopplung, asynchroner Kommunikation, fehlertoleranter Verarbeitung und anderen Funktionen bietet die Nachrichtenwarteschlange Unterstützung für hohe Verfügbarkeit und Skalierbarkeit für verteilte Systeme. Als effiziente und prägnante Programmiersprache wird Golang häufig zum Aufbau von Systemen mit hoher Parallelität und hoher Leistung verwendet.

See all articles