1. Introducción
En el artículo anterior, hemos implementado el monitoreo de una sola instancia de servicio. Por supuesto, en las aplicaciones reales, los datos de monitoreo de una sola instancia no son muy valiosas. Lo que necesitamos más es la información de monitoreo de un sistema de clúster. En este momento, necesitamos introducir turbina. La turbina puede recopilar información de monitoreo y proporcionar la información agregada al tablero de Hystrix para visualización y monitoreo centralizados.
2. Construir oficinas y servicios de monitoreo
2.1 Estructura y preparación general
La implementación de ingeniería de este artículo se basa en el proyecto del artículo anterior. Al introducir la turbina, agrega la información de monitoreo del servicio de servicio de servicio y la lleva al tablero de Hystrix para su visualización. Debido a que necesitamos un tablero para múltiples servicios, construiremos un clúster de servicio de servicio y necesitamos crear un nuevo proyecto de turbina de servicio para agregar información y mostrarla. La estructura general final es la siguiente:
2.2 Crear una turbina de servicio
Cree un nuevo proyecto de arranque de primavera, llamado Turbine de servicio e importe las dependencias necesarias en pom.xml:
<? xml versión = "1.0" encoding = "utf-8"?> <Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschemainstance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <ModelVersion> 4.0.0 </modelversion> <MoupRoupid> com.dan </groupid> <artifactid> <versión> 0.0.1-snapshot </versewer> <packaging> jar </packaging> <name> servicio-turbine </name> <scuidt> Proyecto de demostración para arranque de primavera </scription> <-parent> <proupid> org.springframework.boot </groupid> <artifactid> spring-boot-sharter-parent </artifactid> <releversion> < <PRENTECLOUD.VERSION> edgware.sr1 </springcloud.version> </propiies> <pendencies> <pendency> <MoupRupid> org.springframework.cloud </groupId> <AtifactId> spring-cloud-starter-turbine-turbine </artifactid> </dependencia> <defeferency> <grupiD> org.springframework.cloud </groupiD> <artifactid> spring-cloud-netflix-turbine </artifactid> </pepertency> <peperse> <uproupID> org.springframework.boot </proupid> <artifactid> spring-boot-starter-actuator </artifactid> </dependency> <epardency> <uproupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-test </artifactid> <cope> test </cope> </pepertency> </pendencs> <epeverencymanagement> <pendencies> <spendency> <proupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-dependencias </artifactid> <versersion> $ {springcloud.version} <Proy> Pom </pype> <cope> import </cope> </pendency> </dependencias> </pendencymanagement> <struple> <glugins> <glugin> <moupid> org.springframework.boot </groupid> <artifactid> spring-boot-maven-plugin </artifactid> </glugin> </glugins> </build> </build> </proyect> Agregue la anotación de @enableturbine a la clase de inicio del proyecto y habilite la turbina. La anotación ya contiene la anotación @EnableScoveryClient, es decir, el servicio de registro ha sido habilitado:
@SpringBootApplication @Enableturbine clase pública ServiceTurbineApplication {public static void main (string [] args) {springapplication.run (serviceTurbineApplication.class, args); }} Agregue configuraciones relacionadas con Eureka y Turbine en Application.Properties, de la siguiente manera:
Spring.Application.name = Service-Turbine Server.port = 8766 Security.Basic.enabled = false eureka.client.serviceurl.defaultzone = http: // localhost: 8761/eureka turbine.aggregator.cluster-conconfig = predeterminado turbine.app-config = servicio-ribbon turbine.cluster-name-extuster-name-expession = "predeterminado" turbine.combine-host-port = true
En la configuración anterior, el parámetro Turbine.App-Config configura la lista ServiceId en Eureka para indicar qué servicios están monitoreados; El parámetro Turbine.Cluster-Name-Expression especifica el nombre del clúster como predeterminado. Cuando hay una gran cantidad de servicios, se pueden comenzar a construir múltiples servicios de turbina para construir diferentes grupos de agregación. Este parámetro se puede usar para distinguir estos diferentes grupos de agregación. Al mismo tiempo, el valor del parámetro se puede usar para ubicar diferentes grupos de agregación en el tablero de Hystrix. Simplemente especifique el parámetro de clúster en la URL de la secuencia Hystrix; El parámetro Turbine.comBine-Host-Port se establece en verdadero, de modo que los servicios en el mismo host se pueden distinguir mediante la combinación del nombre del host y el número de puerto. Por defecto, el host distinguirá diferentes servicios, lo que hará que los diferentes servicios en la máquina local se agregen en un solo servicio para estadísticas durante la depuración.
3. Monitoreo de clúster
Iniciar el proyecto Eureka-Server con el número de puerto 8761;
Iniciar el proyecto Eureka-Client con los números de puerto 8762 y 8763;
Iniciar el proyecto de servicio de servicio con los números de puerto 8764 y 8765;
Inicie el proyecto de servicio-turbina con el número de puerto 8766.
Visite http: // localhost: 8766/turbine.stream para ver:
Visite http: // localhost: 8765/hystrix, ingrese el flujo de monitoreo http: // localhost: 8766/turbine.stream para ver:
Como puede ver en la figura, aunque hemos comenzado dos ribones de servicio, la página de monitoreo todavía solo muestra un diagrama de monitoreo. Sin embargo, podemos encontrar que el atributo de hosts en el área de informes de clúster en la figura es diferente de cuando se intenta un monitoreo independiente antes, pero debido a que estas dos instancias son el mismo servicio, y para el clúster, nos preocupa la alta disponibilidad del clúster de servicio, por lo que la turbina verá el mismo servicio como un todo y lo resumirá en un diagrama de monitoreo.
Por supuesto, si realmente desea ver dos diagramas de monitoreo, puede establecer el Spring.Application. Nombre de una de las instancias de Service-Ribbon a otro nombre, de modo que aparecerán dos diagramas de monitoreo diferentes después de funcionar.
4. Combinado con el corredor de mensajes
Cuando Spring Cloud encapsula la turbina, también encapsula una implementación de colección basada en el corredor de mensajes. Por lo tanto, podemos generar toda la información de monitoreo que debe recopilarse en el corredor de mensajes, y luego el servicio de turbina obtendrá esta información de monitoreo de forma asincrónica del corredor de mensajes, y finalmente agregará y los generará al tablero de Hystrix. Al introducir un corredor de mensajes, la arquitectura de monitoreo implementada por nuestro tablero de turbina e hystrix se puede cambiar a la estructura que se muestra en la figura a continuación:
Primero, cree un nuevo proyecto de arranque de primavera, llamado Service-Turbine-AMQP e introduzca las dependencias de activador de primavera-nube-turbine-amp y spring-boot-starter-activador. Ver esto es solo introducir estas dos dependencias, porque la turbina-turbine-AMQP de primavera en la nube en realidad envuelve el conejo de la turbina-turbine-turbine-turbine de primavera y el conejo de la estrella de la nube de primavera.
<? xml versión = "1.0" encoding = "utf-8"?> <Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschemainstance" xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <mododelversion> 4.0.0 </modelversion> <grupo> com.dan </groupid> <artifactid> Service-Turbine-Amqp <versión> 0.0.1-snapshot </versewer> <packaging> jar </packaging> <name> service-turbine-amqp </name> <solding> Proyecto de demostración para el arranque de primavera </cription> <-parent> <proupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-parent </artifactid> <version> 1.5. <RelativePath/> <!-Búsqueda de padres desde el repositorio-> </parent> <properties> <proyect.build.sourceEncoding> UTF-8 </project.build.sourceEncoding> <jection.rePorting.outputEncoding> UTF-8 </project.Reporting.outputenCoding> <Java.Version> <Springcloud.version> edgware.sr1 </spring-cloud.version> </propineies> <pendencies> <pendency> <uproupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-turbine-amqp <//dependency> <epele depentency> <grupiD> org.springfringframe.Arbine-Boot. <artifactID> spring-boot starter-actuator </artifactid> <cope> test </pope> </pepertency> </pepertency> </dependency> <ephependencyManagement> <ependency> <ependency> <proupId> org.springframework.cloud </groupid> <artifactid> treing ncloud-dependencias </artifactid> <versión> $ {springcloud.version} </versión> <proy> pom </pype> <cope> import </cope> </pendency> </dependence> </pepressmanagement> <construction> <glugins> <glugin> <proupid> org.springframework.boot </proupid> <artifactID> throt-boot-maven-plugin </artathAct> </artattil> </glugins> </build> </proyecto> Use la anotación @enableturbinreamsam en la clase principal para habilitar la configuración de la transmisión de la turbina:
@SpringBootApplication @EnabletUrbinReam @EnableScoveryClient Class pública ServiceTurbeamqPapplication {public static void main (string [] args) {springApplication.run (ServiceSbineamqpapplication.class, args); }}Luego configure el archivo Application.Properties:
Spring.Application.Name = Service-Turbine-AMQP Server.Port = 8766 eureka.client.serviceurl.defaultzone = http: // localhost: 8761/eureka
Se ha completado la configuración de la turbina. Lo siguiente necesita hacer algunas modificaciones al servicio de servicio para que su información de monitoreo pueda obtenerse a RabbitMQ. Esta modificación también es muy simple. Simplemente agregue la dependencia en Spring-Cloud-Netflix-Hystrix-AMQP en pom.xml, de la siguiente manera:
<Spendency> <MoupRupid> org.springframework.cloud </groupid> <artifactid> spring-netflix-hytrix-amqp </arfactid> </pendency>
Después de completar la configuración anterior, inicie todos los proyectos requeridos, visite http: // localhost: 8765/hystrix, ingrese la transmisión de monitoreo http: // localhost: 8766/turbine.stream, y podemos ver el mismo resultado que antes, excepto que la recopilación de información de monitoreo aquí se implementa asinconalmente a través del corredor de mensajes.
Descarga del código fuente: https://github.com/lingd3/springcloudlearning/tree/master/chapter8
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.