Este artigo fala principalmente sobre o componente de rastreamento de serviço Zipkin e o Spring Cloud Sleuth integra o componente Zipkin.
1. Introdução
Adicione o Sleuth ao caminho de classe de um aplicativo de inicialização de primavera (veja abaixo para exemplos de maven e gradle) e você verá os dados de correlação sendo coletados em logs, desde que você esteja registrando solicitações.
- Extraído do site oficial
A principal função do Spring Cloud Sleuth é fornecer soluções de rastreamento em sistemas distribuídos e é compatível com o Zipkin. Você só precisa introduzir dependências correspondentes no arquivo POM.
2. Rastreamento e análise de serviço
Na arquitetura de microsserviços, os serviços são divididos por meio de serviços. Uma interface exposta ao mundo exterior pode exigir que muitos serviços colaborem para concluir essa função de interface. Se algum serviço no link tiver problemas ou tempo limite de rede, fará com que a chamada da interface falhe. À medida que a empresa continua a se expandir, a chamada entre serviços se tornará cada vez mais complicada.
À medida que mais e mais serviços estão disponíveis, a análise das cadeias de chamadas se tornará cada vez mais complicada. O relacionamento de chamada entre eles pode ser o seguinte:
Iii. Termos
Span: Unidade de trabalho básica. Por exemplo, o envio de um RPC em uma extensão recém -criada é equivalente a enviar uma solicitação de resposta ao RPC. A extensão é identificada exclusivamente por um ID de 64 bits e o rastreamento é representado por outro ID de 64 bits. A extensão possui outras informações de dados, como Digest, Timestamp Events, Key Value Anotações (TAGS), ID do SPAN e ID de progresso (geralmente endereço IP).
A extensão está constantemente começando e parando e, ao mesmo tempo, registra as informações de tempo. Quando você cria um período, você deve detê -lo em algum momento no futuro.
Rastreio: uma estrutura de árvore composta por uma série de vãos. Por exemplo, se você estiver executando um projeto de big data distribuído, pode ser necessário criar um rastreamento.
Anotação: Usado para registrar a existência de um evento no tempo, e algumas anotações principais são usadas para definir o início e o final de uma solicitação.
Graphickize o processo de uso da anotação Zipkin em um sistema:
4. Projeto de construção
Depois de explicar o conhecimento básico, vamos aceitar o trabalho real. O caso deste artigo consiste principalmente em três projetos: um servidor-zipkin, que usa principalmente as funções do Zipkinserver para coletar dados de chamada e exibi-los; um serviço-hi, que expõe a interface HI para o exterior; um serviço-miya, que expõe a interface Miya para o exterior; Esses dois serviços podem ser chamados; E somente depois de serem chamados, o Server-Zipkin coletará dados, e é por isso que são chamados de rastreamento de serviço.
4.1 Construa servidor-zipkin
Crie um projeto Spring-Boot chamado Server-Zipkin e apresente dependências em seu POM:
<Dependences> <pendency> <voundiD> org.springframework.boot </groupiD> <TRAFACTID> Spring-boot-starter </starfactId> </dependency> <pendesency> <ouprougid> org.springframework.boot </groupid> <TifactId> <spring-boot-Seence-web-webweb-tringwork.boot </groupid> <Tifactid> </spring-boot starter-weber-webweb </groupid> <tifactid> spring-boot starter-web-webers <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-server</artifactId> </dependency> <dependency> <PuerpId> io.zipkin.java </frupid> <stifactId> zipkin-autoconfigure-ui </artifactId> </dependency> </dependency> </dependency> <pendency> <purbroud> org.springframe.cloud </grupidy> <TRAFactid> spring-uns-Densens> <type> pom </pype> <cope> importar </cope> </dependency> </dependências> </dependencyManagement>
Na classe de entrada do programa, adicione a anotação @enablezipkinserver para permitir a função do Zipkinserver:
@Springbootapplication@enablezipkinserverpublic class serverzipkinApplication {public static void main (string [] args) {springApplication.run (serverzipkinApplication.class, args); }}No arquivo de configuração Application.yml especifica a porta de serviço como:
server.port = 9411
4.2 Crie serviço-hi
Em sua introdução de POM, a dependência inicial é o Spring-Cloud-Starter-Zipkin, o código é o seguinte:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--compile('org.springframework.cloud:spring-cloud-starter-zipkin')--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependency> </dependency> </dependency> <dependencyManagement> <dependency> <Depencency> <Puerpid> org.springframework.cloud </groupid> <TRATIFACTID> Spring-cloud-dependências </ArtifactId> <Versão> dalston.rc1 </version> </type> pom </type> <sCOPE> Import </scope> </dependency> </dependências> </dependência>Em seu arquivo de configuração Application.yml, especifique o endereço do servidor Zipkin e o cabeçalho é especificado ao configurar "spring.zipkin.base-url":
server.port = 8988spring.zipkin.base-url = http: // localhost: 9411spring.application.name = Service-hi
Não há problema em apresentar a dependência da Spring-Cloud-Starter-Zipkin e definir spring.zipkin.base-url.
Interface de exposição externa:
@Springbootapplication@RestControllerPublic Classe ServiceHiapplication {public static void main (string [] args) {springapplication.run (servicehiapplication.class, args); } private estático final logger log = logger.getLogger (ServiceHiapplication.class.getName ()); @Autowired Private Resttemplate Resttemplate; @Bean public Resttemplate getRestTemplate () {return new Resttemplate (); } @ReQuestMapping ("/HI") public String calhome () {log.log (Level.info, "Calling Trace Service-hi"); Return RestTemplate.getForObject ("http: // localhost: 8989/miya", string.class); } @ReQuestMapping ("/info") public String info () {log.log (Level.info, "Calling Trace Service-hi"); retornar "I'm Service-hi"; } @Bean public sempresampler defaultsampler () {return new sempresampler (); }}4.3 Crie serviço-miya
O processo de criação prejudica o serviço-hi, apresenta as mesmas dependências e configura spring.zipkin.base-url.
Interface de exposição externa:
@SpringboOtapplication@RestControllerPublic Classe ServicemiyaApplication {public static void main (String [] args) {springApplication.run (servicemiyaApplication.class, args); } private Static final Logger Log = Logger.getLogger (servicemiyaApplication.class.getName ()); @RequestMapping ("/HI") public String Home () {Log.log (Level.info, "Hi está sendo chamado"); retornar "oi eu sou miya!"; } @ReQuestMapping ("/miya") public string info () {log.log (nível.info, "info está sendo chamado"); Return RestTemplate.getForObject ("http: // localhost: 8988/info", string.class); } @AUTOWIRed Private Resttemplate Resttemplate; @Bean public Resttemplate getRestTemplate () {return new Resttemplate (); }}4.4 Inicie o projeto, demonstre e rastreie
Inicie os três projetos acima, por sua vez, abra o navegador para acessar: http: // localhost: 9411/e a seguinte interface aparecerá:
Visite: http: // localhost: 8989/miya, o navegador aparece: eu sou serviço-hi
Em seguida, abra a interface de http: // localhost: 9411/e clique em dependências para descobrir as dependências do serviço:
Clique em encontrar traços para ver os dados dos serviços específicos que se chamam:
Faça o download do código -fonte deste artigo: https://github.com/forezp/springcloudlearning/tree/master/chapter9
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.