1. Introdução
No artigo anterior, implementamos o monitoramento de uma única instância de serviço. Obviamente, em aplicativos reais, os dados de monitoramento de uma única instância não são muito valiosos. O que precisamos mais são as informações de monitoramento de um sistema de cluster. Neste momento, precisamos introduzir turbinas. A turbina pode coletar informações de monitoramento e fornecer as informações agregadas ao painel Hystrix para exibição e monitoramento centralizados.
2. Construa agências e serviços de monitoramento
2.1 Estrutura e preparação gerais
A implementação de engenharia deste artigo é baseada no projeto do artigo anterior. Ao introduzir turbinas, ele agrega as informações de monitoramento do serviço de serviço de serviço e a produz no painel Hystrix para exibição. Como precisamos de um painel para vários serviços, criaremos um cluster de fita de serviço e precisamos criar um novo projeto de turbina de serviço para agregar informações e exibi-las. A estrutura geral final é a seguinte:
2.2 Crie uma turbina de serviço
Crie um novo projeto de inicialização da primavera, denominado serviço-turbina, e importe as dependências necessárias no pom.xml:
<? xml versão = "1.0" coding = "utf-8"?> <Projeto xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.ww3.org/2001/xmlschaMance xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <lodelversion> 4.0.0 </modelversion> <broupId> com.dan </groupid> art. <Versão> 0.0.1-SNAPSHOT </Version> <batyaging> jar </acheging> <name> Serviço-turbine </name> <cription> Projeto de demonstração para a inicialização da mola </cription> </parent> <puriid> org.springframework.boot </groupid> <stifactId> spring-boot-starter-Parent </artef lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Edgware.SR1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-turbine</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> </ArtifactId> </dependency> <pendesence> <puperid> org.springframework.boot </frugiD> <stifactId> spring-boot-starter-actuator </ArtifactId> </dependency> <pusency> <proupid> ourg.sringfringfringfringfringfringfringfringfringfringfringfringfringfringFringFringFringFringFringFringFringFring..SPRINGFRINGFRINGFRINGFRINGFRINGFROTFLOTEMBROTEMBROTENGROTFLIMPROTF> </dependency> <purpybrot> </dependence> </dependence> </dependence> </dependência <TRAFACTID> Spring-Boot-Starter-Test </storkactid> <cope> Test </copo> </dependency> </dependencies> <pendencyManagement> <pendências> <pendesency> <puperid> org.springframework.cloud </groupid> <Artifactid> Spring-cloud) </stringFramework.cloud> <Type> POM </pype> <cope> importar </cope> </dependency> </dependências> </dependencyManagement> <fruct> <flugins> <lugin> <voundid> org.springframework.boot </frundid> <stifactId> spring-maven-plugin/</sturfactId> </plugin> plugin> spring-maven-plugin </hirtfactid> </plugin>
Adicione a anotação @enableturbine à aula de inicialização do projeto e habilite a turbina. A anotação já contém a anotação @Enablediscoveryclient, ou seja, o Serviço de Registro foi ativado:
@SpringbooTApplication @enabletrurbine classe pública serviceturbineApplication {public static void main (string [] args) {springapplication.run (serviceturbineApplication.class, args); }} Adicione configurações relacionadas a Eureka e Turbine no Application.properties, como segue:
spring.Application.name = serviço-turbine server.port = 8766 Security.basic.enabled = false eureka.client.serviceurl.defaultZone = http: // locluster: 8761/eureka Turbine.aggregator.cluster-config = turbine default.app-config. turbine.combine-host-port = true
Na configuração acima, o parâmetro Turbine.App-Config configura a lista do ServiceId em Eureka para indicar quais serviços são monitorados; O parâmetro Turbine.Cluster-Name-Expression especifica o nome do cluster como padrão. Quando há um grande número de serviços, vários serviços de turbinas podem ser iniciados para construir diferentes clusters de agregação. Este parâmetro pode ser usado para distinguir esses diferentes clusters de agregação. Ao mesmo tempo, o valor do parâmetro pode ser usado para localizar diferentes clusters de agregação no painel Hystrix. Basta especificar o parâmetro de cluster no URL do fluxo Hystrix; O parâmetro turbine.combine-host-port está definido como true, para que os serviços no mesmo host possam ser distinguidos pela combinação de nome do host e número da porta. Por padrão, diferentes serviços serão distinguidos pelo host, que fará os diferentes serviços da máquina local agregarem um serviço para estatísticas durante a depuração.
3. Monitoramento do cluster
Inicie o projeto Eureka-Server com o número da porta 8761;
Inicie o projeto Eureka-Client com números de porta 8762 e 8763;
Inicie o projeto de serviço de serviço com números de porta 8764 e 8765;
Inicie o projeto de turbina de serviço com o número da porta 8766.
Visite http: // localhost: 8766/turbine.stream para ver:
Visite http: // localhost: 8765/hystrix, digite o fluxo de monitoramento http: // localhost: 8766/turbine.stream para ver:
Como você pode ver na figura, embora tenhamos iniciado dois ribbons de serviço, a página de monitoramento ainda está mostrando apenas um diagrama de monitoramento. No entanto, podemos descobrir que os hosts atribuem na área de relatórios de cluster na figura é diferente ao tentar monitoramento independente antes, mas como essas duas instâncias são o mesmo serviço e, para o cluster, estamos preocupados com a alta disponibilidade do cluster de serviço; portanto, a turbina verá o mesmo serviço e resumindo-o em um diagrama de monitoramento.
Obviamente, se você realmente deseja ver dois diagramas de monitoramento, poderá definir o Spring.Application.name de uma das instâncias de serviço de serviço para outro nome, para que dois diagramas de monitoramento diferentes apareçam após a execução.
4. Combinado com corretor de mensagens
Quando a Spring Cloud encapsula a turbina, ele também encapsula uma implementação de coleção com base no corretor de mensagens. Portanto, podemos produzir todas as informações de monitoramento que precisam ser coletadas no corretor de mensagens e, em seguida, o serviço de turbina obterá essas informações de monitoramento de forma assíncrona do corretor de mensagens e, finalmente, agregá -las e gerá -las no painel Hystrix. Ao introduzir um corretor de mensagens, a arquitetura de monitoramento implementada pelo nosso painel de turbina e hystrix pode ser alterada para a estrutura mostrada na figura abaixo:
Primeiro, crie um novo projeto de inicialização da primavera, chamado Service-Turbine-AMQP, e apresente as dependências de ator-devastador-trurbina-AMQP da mola-nuvem e primavera-boot-starter-attuador. Vendo isso está apenas introduzindo essas duas dependências, porque o Spring-Cloud-Starter-Turbine-AMQP realmente envolve o spring-cloud-starter-tream-stream e o star-star-stream-rabbit-stream-stream.
<? xml versão = "1.0" coding = "utf-8"?> <Projeto xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.ww3.org/2001/xmlschaMance xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <lodelversion> 4.0.0 </modelVersion> <voupid> com.dan </groupid> art. <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>service-turbine-amqp</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <RelityPath/> <!-Lookup Parent from Repository-> </axer> <Properties> <Project.build.sourceEncoding> utf-8 </project.build.sourceEncoding> <javputpatencoding.outputEncoding> utf-8 </project.reporting.outputing. <spring-cloud.version>Edgware.SR1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-turbine-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> </ArtifactId> Spring-Boot-Starter-Actuator </ArtifactId> <cope> Test </copo> </dependency> </dependency> </dependency> <pendencyManagement> <pendency> <pendence> <purbrougid> org.springframework.cloud </grupo> <TristifactId> Spring-Derg. <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependency> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </flugins> </fruct> </ject> Use a anotação @enableturbinestream na classe principal para permitir a configuração do fluxo de turbinas:
@SpringbooTApplication @enabletrurbinestream @EnablediscOveryClient Classe pública serviceturbineamqPapplication {public static void main (string [] args) {springapplication.run (serviceturbinEamqPapplication.class, args); }}Em seguida, configure o arquivo Application.Properties:
spring.Application.Name = Service-turbine-amqp server.port = 8766 eureka.client.serviceurl.defaultZone = http: // localhost: 8761/eureka
A configuração da turbina foi concluída. O seguinte precisa fazer algumas modificações no RIBBON de serviço para que suas informações de monitoramento possam ser emitidas para o RabbitMQ. Esta modificação também é muito simples. Basta adicionar dependência do Spring-Cloud-Netflix-hystrix-amqp em pom.xml, como segue:
<Depencency> <PuerpId> org.springframework.cloud </frupid> <TRATIFACTID> Spring-cloud-Netflix-hystrix-amqp </stutifactId> </dependency>
Depois de concluir a configuração acima, inicie todos os projetos necessários, visite http: // localhost: 8765/hystrix, insira o fluxo de monitoramento http: // localhost: 8766/turbina.stream e podemos ver o mesmo resultado que antes, exceto que a coleta de informações aqui é implementada como sincronicamente através do broker.
Download do código -fonte: https://github.com/lingd3/springcloudlearning/tree/master/chapter8
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.