


So implementieren Sie den Direktantwortmodus für Springboot RabbitMQ-Antwortnachrichten
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>
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
(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"); } }
Business-Klasse:
@Data @NoArgsConstructor @AllArgsConstructor public class Vehicle implements Serializable { private Integer id; private String name; }
(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); }
(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); }
(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; }
(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:
Link:
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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. 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

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

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

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.

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

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

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.
