1. Einführung
In MicroService Architecture Systems verwenden wir normalerweise einen leichten Message -Broker, um ein gemeinsames Nachrichtenthema zu erstellen, um alle Microservice -Instanzen im System zu verbinden. Da die in diesem Thema generierten Nachrichten von allen Instanzen angehört und konsumiert werden, nennen wir es den Nachrichtenbus.
2. Message Proxy
Message Broker ist ein Architekturmodell für Nachrichtenüberprüfung, Übertragung und Routing. Es dient als Kommunikationsplanung zwischen Anwendungen und minimiert Abhängigkeiten zwischen Anwendungen, sodass Anwendungen Kommunikationsprozesse effizient entkoppeln können. Der Message Broker ist ein Middleware -Produkt. Sein Kern ist ein Nachrichtenrouting -Programm, mit dem Nachrichten empfangen und verteilen und an der richtigen Anwendung anhand des Set Message Processing Flows geleitet werden. Es umfasst unabhängige Kommunikations- und Messaging -Protokolle, die die Netzwerkkommunikation innerhalb und zwischen Organisationen ermöglichen. Der Zweck des Entwerfens eines Proxy besteht darin, Nachrichten aus der Anwendung zu übergeben und spezielle Vorgänge auszuführen. Im Folgenden finden Sie Szenarien in Unternehmensanwendungen, in denen wir häufig einen Message Proxy verwenden müssen:
Es gibt bereits viele Open -Source -Produkte, die alle verwenden können, wie z. B.:
3. Springcloud+Rabbitmq
(1) Einführung und Installation von Rabbitmq wird nicht detailliert.
(2) pom.xml
<Depelencies> <Deponcy> <gruppe> org.springframework </abhängig> </Abhängigkeiten>
(3) application.yml
Frühling: Anwendung: Name: Rabbitmq-Hello Rabbitmq: Host: ***. ***. ***. ***. *** Port: 5672 Benutzername: Gast Passwort: Gast
(4) Absender
@Component Public Class Sender {private statische endgültige Logger log = loggerfactory.getLogger (sender.class); @Autowired private amQptemplate amQptemplate; public void send () {String context = "Hallo" + neues Datum (); log.info ("Absender:" + Kontext); this.amqptemplate.convertandSend ("Hallo", Kontext); }}(5) Empfänger
@Component @rabbitListener (queues = "hello") öffentlicher Klasse Receiver {private static Final Logger log = loggerFactory.getLogger (receiver.class); @RabbitHandler public void prozess (String Hallo) {log.info ("Empfänger:" + Hallo); }}(6) Erstellen Sie Rabbitmq -Konfigurationsklasse RabbitConfig
@Configuration Public Class RabbitConfig {@Bean public Queue helloqueue () {return New Queue ("Hallo"); }} (7) Erstellen Sie eine Unit -Testklasse, um die Produktion von Call -Nachrichten zu erhalten
@Runwith (SpringJunit4ClASSRunner.class) @springboottest (classes = SpringCloudBusRabbitMQApplication.class) öffentliche Klasse HelloApplicationTests {@autowired Private Sender Sender; @Test public void hello () löst Ausnahme aus {sender.send (); }} (8) Testen Sie HelloApplicationTests, führen Sie aus
(9) Gastgeber: 15672
4. Konfigurationskonstoffe Transformation (integrieren Sie den SpringCloud-Bus)
(1) pom.xml
<Depelencies> <Deponcy> <gruppe> org.springframework <gruppeID> org.springFramework.cloud </GroupId> <artifactId> Spring-Cloud-Starter-Eureka </artifactId> </abhängig> <abhängigkeit> <gruppe> org.springframework <SupructId> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Starter-Actuator </artifactId> </abhängig> <abhängigkeit> <gruppe> org.springFramework
(2) Bootstrap.Properties
spring.application.name = configspace spring.cloud.config.label = Master Spring.cloud.config.profile = Dev Spring.cloud.config.uri = http: // localhost: 5588/eureka.client Spring.Rabbitmq.host = 118.89.237.88 Spring.Rabbitmq.port = 5672 Spring.Rabbitmq.Unername = guden Spring.rabbitmq.Password = Guest Management.security.enabled = false
(3) Keine Notwendigkeit, die anderen zu ändern
V. Test
(1) Testvorbereitung
Ein Service Registration Center, Eurekaserver, Port 5555;
Ein verteiltes Konfigurationszentrum, ConfigServer, mit Port 5588;
Zwei verteilte Konfigurationen, ConfigClient, Ports sind 5589 und 5590; (2) Besuchen Sie http: // localhost: 5589/von
(3) Besuchen Sie http: // localhost: 5590/von
Rabbitmq:
(4) Gehen Sie zum Lagerhaus, um den Kennwortwert zu ändern
von = git-dev-v1.0 von SpringCloud config-server username = SpringCloud Passwort = 1234567890
(5) Postanforderung http: // localhost: 5589/bus/aktualisiert oder http: // localhost: 5590/bus/aktualisiert
Nach einer erfolgreichen Anforderung wird Config-Client die Konfigurationsdatei erneut lesen.
(6) Besuchen Sie erneut
Wenn der Beitrag Anfragen: http: // localhost: 5590/bus/aktualisiert, besuchen Sie bitte http: // localhost: 5589/von
Darüber hinaus kann die Schnittstelle/Bus/Aktualisierung den Dienst angeben, dh den Parameter "Benutzername" wie "/bus/refresh? Destination = userername: **", um alle Dienste zu aktualisieren, deren Servicename der Benutzername ist, unabhängig von der IP -Adresse.
(7) Architektur
(8) Architekturanpassung
Da die Schnittstelle /Bus /Refresh von SpringCloud Bus Parameter für Konfigurationsaktualisierungen für Dienste und Instanzen liefert, kann unsere Architektur auch einige Anpassungen entsprechend vornehmen. In der vorherigen Architektur ist die Konfigurationsaktualisierung des Dienstes erforderlich, um eine Anforderung an eine Instanz im spezifischen Dienst zu senden und dann die Konfigurationsaktualisierung des gesamten Dienstcluster auszulösen. Obwohl Funktionen implementiert werden können, unterscheiden sich das Ergebnis, dass sich die von uns angegebenen Anwendungsinstanzen von anderen Anwendungsinstanzen im Cluster unterscheiden, was die Komplexität innerhalb des Clusters erhöht und sich nachteilig auf die künftigen Betriebs- und Wartungsarbeiten auswirkt. Wenn die Serviceinstanz beispielsweise migriert werden muss, müssen wir die Konfiguration im Web -Hook usw. ändern. Daher müssen wir jeden Knoten im Service -Cluster -Peer so weit wie möglich machen.
Daher haben wir einige Anpassungen der vorherigen Architektur vorgenommen, wie in der folgenden Abbildung gezeigt:
Die folgenden Änderungen wurden vorgenommen:
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.