1. Introducción
En los sistemas de arquitectura de microservicio, generalmente usamos un corredor de mensajes liviano para crear un tema de mensaje común para conectar todas las instancias de microservicio en el sistema. Dado que los mensajes generados en este tema serán escuchados y consumidos por todas las instancias, lo llamamos el bus de mensajes.
2. Proxy de mensajes
Message Broker es un modelo arquitectónico de verificación, transmisión y enrutamiento de mensajes. Sirve como una programación de comunicación entre aplicaciones y minimiza las dependencias entre las aplicaciones, para que las aplicaciones puedan desacoplar los procesos de comunicación de manera eficiente. El corredor de mensajes es un producto de middleware. Su núcleo es un programa de enrutamiento de mensajes utilizado para recibir y distribuir mensajes, y reenviarlos a la aplicación correcta en función del flujo de procesamiento de mensajes establecido. Incluye protocolos de comunicación y mensajería independientes, lo que permite la comunicación de la red dentro y entre organizaciones. El propósito de diseñar un proxy es poder pasar mensajes de la aplicación y realizar algunas operaciones especiales. Los siguientes son escenarios en aplicaciones empresariales donde a menudo necesitamos usar el proxy de mensajes:
Ya hay muchos productos de código abierto para que todos los usen, como:
3. SpringCloud+Rabbitmq
(1) La introducción e instalación de RabbitMQ no se detallará.
(2) pom.xml
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </pendency> </dependencias>
(3) Application.yml
Primavera: Aplicación: Nombre: Rabbitmq-Hello Rabbitmq: Host: ***. ***. ***. ***. *** Puerto: 5672 Nombre de usuario: Contraseña de invitado: Invitado
(4) remitente
@Component Public Class Sender {private static final logger log = loggerFactory.getLogger (Sender.class); @AUtowired private amqptemplate amqptemplate; public void send () {String context = "Hello" + New Date (); log.info ("remitente:" + contexto); this.amqptemplate.convertandSend ("hola", contexto); }}(5) receptor
@Component @RabBitListener (queues = "Hello") receptor de clase pública {private static final logger log = loggerFactory.getLogger (receptor.class); @RabBithandler Public void Process (String Hello) {log.info ("receptor:" + hola); }}(6) Crear clase de configuración de RabbitMQ RabbitCig
@Configuration public class RabbitConfig {@Bean public Queue Helloqueue () {return New Queue ("Hello"); }} (7) Cree una clase de prueba unitaria para llamar a la producción de mensajes
@RunWith (SpringJunit4ClassRunner.class) @SpringBoottest (classes = springCloudBusRabbitMqApplication.class) clase pública HelloApplicationTests {@aUtowired Servidor privado Servidor; @Test public void hello () lanza la excepción {Sender.send (); }} (8) Prueba, ejecute HelloApplicationTests
(9) Visite el anfitrión: 15672
4. Transforme config-client (integrar el bus de springcloud)
(1) pom.xml
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <MoupRid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-eureka </artifactid> </dependency> <paper> <grupo) <MoupRiD> org.springframework.boot </groupid> <artifactid> spring-boot-starter-actuator </artifactid> </dependency> <peperspency> <grupoD> org.springframework.boot </groupid> <artifactid> spring-boot-starter-test </artifactid> <cope> test </scope> </dependence>
(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.serviceurl.defaultzone = http: // localhost: 55555/eurekaka/servidor. spring.rabbitmq.host = 118.89.237.88 spring.rabbitmq.port = 5672 spring.rabbitmq.username = invitado spring.rabbitmq.password = gestes gestion.security.enabled = false
(3) No hay necesidad de cambiar a los demás
V. Prueba
(1) Preparación de la prueba
Un centro de registro de servicio, Eurekaserver, puerto 5555;
Un centro de configuración distribuido, configServer, con puerto 5588;
Dos configuraciones distribuidas, configClient, puertos son 5589 y 5590; (2) Visite http: // localhost: 5589/de
(3) Visite http: // localhost: 5590/de
Rabbitmq:
(4) Vaya al almacén para modificar el valor de la contraseña
from = git-dev-v1.0 por SpringCloud config-server UserName = SpringCloud Password = 1234567890
(5) Solicitud de post http: // localhost: 5589/bus/actualización o http: // localhost: 5590/bus/actualización
Después de una solicitud exitosa, config-client volverá a leer el archivo de configuración.
(6) Visite de nuevo
Si la publicación solicita: http: // localhost: 5590/bus/refresh, visite http: // localhost: 5589/desde
Además, la interfaz/bus/actualización puede especificar el servicio, es decir, usar el parámetro "Nombre de usuario", como "/bus/refrhing? Destination = username: **" para actualizar todos los servicios cuyo nombre del servicio es el nombre de usuario, independientemente de la dirección IP.
(7) Arquitectura
(8) Ajuste de arquitectura
Dado que la interfaz /bus /actualización del bus SpringCloud proporciona parámetros para actualizaciones de configuración para servicios e instancias, nuestra arquitectura también puede hacer algunos ajustes en consecuencia. En la arquitectura anterior, la actualización de configuración del servicio requerida para enviar una solicitud a una instancia en el servicio específico y luego activar la actualización de configuración de todo el clúster de servicio. Aunque las funciones se pueden implementar, el resultado es que las instancias de aplicación que especificamos serán diferentes de otras instancias de aplicación en el clúster, lo que aumentará la complejidad dentro del clúster y será perjudicial para el futuro trabajo de operación y mantenimiento. Por ejemplo, si la instancia del servicio necesita ser migrada, tenemos que modificar la configuración en el gancho web, etc. Por lo tanto, debemos hacer que cada nodo en el grupo de clúster de servicio sea tanto como sea posible.
Por lo tanto, hemos realizado algunos ajustes a la arquitectura anterior, como se muestra en la figura a continuación:
Se han realizado los siguientes cambios:
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.