Aprenda SpringCloud conmigo | Spring Cloud Bus Message Bus

Springboot: 2.1.6.RELEASE

SpringCloud: Greenwich.SR1

Si no hay instrucciones especiales, esta serie de tutoriales usa los
dos artículos anteriores de la versión anterior. Hablamos sobre el centro de configuración de Spring Cloud Config. Cuando actualizamos la configuración en github, si queremos obtener la última configuración, necesitamos actualizar manualmente o usar webhook. El mecanismo de enviar código cada vez que se envía una solicitud para actualizar al cliente, cada vez más clientes, cada cliente debe ejecutarse nuevamente, esta solución no es adecuada. Usar Spring Cloud Bus (los chinos se traducen muy vívidamente en el bus de mensajes, prefiero llamar al bus de mensajes) puede resolver perfectamente este problema.

  1. Spring Cloud Bus
    Spring Cloud Bus conecta varios nodos distribuidos a través de un agente de mensajes ligero. Esto se usará para cambios de estado de difusión (como cambios de configuración) u otras instrucciones de mensaje. Una idea central del bus Spring es extender la aplicación Spring Boot a través de un arrancador distribuido, y también se puede usar para establecer un canal de comunicación entre múltiples aplicaciones. En la actualidad, la única forma de lograr esto es utilizar el agente de mensajes AMQP como canal. La configuración de las mismas funciones (algunas dependen de la configuración del canal) se encuentra en la documentación de más canales.
    Puede entenderse como la gestión y difusión de mensajes en todos los proyectos distribuidos. De hecho, la esencia es utilizar el mecanismo de transmisión MQ para difundir mensajes en sistemas distribuidos. Actualmente, Kafka y RabbitMQ se usan comúnmente. El uso del mecanismo de bus puede hacer muchas cosas. Entre ellas, la actualización del cliente del centro de configuración es uno de los escenarios de aplicación típicos. Utilizamos una imagen para describir el mecanismo que utiliza el bus en el centro de configuración.

Aprenda SpringCloud conmigo | Spring Cloud Bus Message Bus
De acuerdo con esta figura, podemos ver los pasos para usar Spring Cloud Bus para la actualización de la configuración:

El código de envío activa una publicación para enviar el bus / refrescar
al cliente A. El cliente A recibe la solicitud de actualizar la configuración del servidor y la envía a Spring Cloud Bus.
El bus Spring Cloud recibe el mensaje y notifica a otros clientes.
Otros clientes reciben la notificación y solicitan el servidor. Obtenga la última configuración de
todos los clientes

  1. Ejemplo de proyecto
    Utilizamos el servidor de configuración y el cliente de configuración en el artículo anterior para transformar, mq usa rabbitmq como ejemplo.
    2.1 Cliente config-client
    2.1.1 Agregar dependencia
    <dependency>
    <groupId> org.springframework.cloud </ groupId>
    <artifactId> spring-cloud-starter-bus-amqp </ artifactId>
    </ dependency>
    Copiar código necesita más Introduzca el paquete spring-cloud-starter-bus-amqp, agregue soporte para el bus de mensajes
    2.1.2 Archivo de configuración bootstrap.properties
    spring.application.name = spring-cloud-config-client
    server.port = 8081

spring.cloud.config.name = springcloud-config
spring.cloud.config.profile = dev
spring.cloud.config.label = master
spring.cloud.config.discovery.enabled = true
spring.cloud.config.discovery.serviceId = spring-cloud-config-server

eureka.client.service-url.defaultZone = http: // localhost: 8761 / eureka /

management.endpoints.web.exposure.include = *

Activa el seguimiento de mensajes

spring.cloud.bus.trace.enabled = true

spring.rabbitmq.host = 127.0.0.1
spring.rabbitmq.port = 5672
spring.rabbitmq.username =
spring.rabbitmq.password = El
archivo de configuración del código de copia necesita aumentar la configuración relacionada con RebbitMq, para que se complete el código del cliente.
2.1.3 La prueba
inicia eureka, config-serve y config-client en secuencia.
Modifique la configuración de inicio del cliente de configuración e inicie el servicio en los puertos 8081 y 8082.
Una vez que se completa el inicio, el navegador accede a la conexión respectivamente: http: // localhost: 8081 / hello , http: // localhost: 8082 / hello , puede encontrar que el contenido que se muestra en la página es: hello dev update1, lo que indica que el cliente ha leído Al contenido del lado del servidor.
Ahora actualizamos el archivo de configuración en github, cambiamos el contenido de configuración a hello dev update, primero visita http: // localhost: 8081 / hello, puedes ver que la página todavía muestra: hello dev update1.
Enviamos una solicitud POST de / actuator / bus-refresh al servicio con el puerto 8081. En win10, use el siguiente comando para simular un webhook.
curl -X POST http: // localhost: 8081 / actuator / bus-refresh
Copie el código Nota: En la versión springboot2.x, la ruta de actualización es: / actuator / bus-refresh, en la versión springboot1.5.x, la ruta de actualización es: / bus / refresh.
Una vez completada la ejecución, primero visitamos http: // localhost: 8082 / hello, puede ver que el contenido de impresión de la página se ha convertido en: hello dev update, esto muestra que nuestro servicio en el puerto 8081 ha enviado la información actualizada a rabbitmq 8082 servicio de puerto, por lo que nos hemos dado cuenta del ejemplo en la Figura 1.
2.2 En
el proceso de la versión mejorada anterior, aunque logramos el propósito de usar un bus de mensajes para activar la actualización y refrescar toda la configuración del cliente, este método no es adecuado, como sigue:

Romper la responsabilidad única de los microservicios. El microservicio en sí es un módulo comercial, no debe asumir la responsabilidad de actualizar la configuración.
La equivalencia de los nodos de microservicio se destruye.
Si la IP del cliente cambia, entonces necesitamos modificar la configuración de WebHook.

Podemos mejorar el proceso anterior

Aprenda SpringCloud conmigo | Spring Cloud Bus Message Bus
En este momento, los pasos de actualización de la configuración de Spring Cloud Bus son los siguientes:

Envíe el código para activar la publicación para enviar bus / refrescar al
servidor. El servidor recibe la solicitud y la envía al Spring Cloud Bus. El
bus Spring Cloud recibe el mensaje y notifica a otros clientes. El
otro cliente recibe la notificación y solicita al servidor que obtenga la última configuración.
Todos los clientes Obtenga la última configuración

En este caso, realizamos algunos cambios en el código del lado del servidor para admitir / actuator / bus-refresh
y los cambios del lado del cliente anteriores son básicamente los mismos
2.2.1 Agregar dependencia
<dependency>
<groupId> org.springframework.cloud </ groupId>
<artifactId> spring-cloud-starter-bus-amqp </ artifactId>
</ dependency>

Necesita introducir más paquete spring-cloud-starter-bus-amqp para aumentar la compatibilidad con el bus de mensajes

2.2.2 Archivo de configuración application.yml

servidor:
puerto: 8080
spring:
aplicación:
nombre: spring-cloud-config-server
cloud:
config:
server:
git:
uri: https://github.com/meteor1993/SpringCloudLearning
ruta de búsqueda: capítulo6 / springcloud-config
nombre de usuario:
contraseña:
rabbitmq:
host: 217.0.0。1
puerto: 5672
nombre de usuario:
contraseña:
gestión:
puntos finales:
web:
exposición:
incluir: "*"
eureka:
cliente:
service-url:
defaultZone: http: // localhost: 8761 / eureka / /

El archivo de configuración debe agregar la configuración relacionada con RebbitMq, el actuador abre todos los accesos.
2.2.3 La prueba
inicia eureka, config-serve y config-client en secuencia.
Modifique la configuración de inicio del cliente de configuración e inicie el servicio en los puertos 8081 y 8082.
De acuerdo con el método de prueba anterior, el acceso a ambas pruebas de cliente puede devolver información correctamente. Modifique también el archivo de configuración, cambie el valor a: hello im dev update y envíe al almacén. Use el siguiente comando para simular webhook en win10.
curl -X POST http: // localhost: 8081 / actuator / bus-refresh Después de completar la
ejecución del código de copia, visite los dos clientes por turno y devuelva: hola im dev update. Significa que los tres clientes han obtenido la información del último archivo de configuración, por lo que nos hemos dado cuenta del ejemplo en la figura anterior.

Supongo que te gusta

Origin blog.51cto.com/youling87/2486828
Recomendado
Clasificación