diff --git a/README.md b/README.md index 4ae31dcedbb6983e808ff8828de1949e06cc3415..ea2f33df45727727c00232bab3ff836db95b53c5 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,13 @@ This microservices branch was initially derived from [AngularJS version](https://github.com/spring-petclinic/spring-petclinic-angular1) to demonstrate how to split sample Spring application into [microservices](http://www.martinfowler.com/articles/microservices.html). To achieve that goal we used [Spring Cloud Netflix](https://github.com/spring-cloud/spring-cloud-netflix) technology stack. ## Starting services locally -Every microservice is a Spring Boot application and can be started locally using IDE or `mvn spring-boot:run` command. Please note that supporting services (Config and Discovery Server) must be started before any other application (Customers, Vets, Visits and API). +Every microservice is a Spring Boot application and can be started locally using IDE or `mvn spring-boot:run` command. Please note that supporting services (Config and Discovery Server) must be started before any other application (Customers, Vets, Visits and API). Tracing server startup is optional. If everything goes well, you can access the following services at given location: * Discovery Server - http://localhost:8761 * Config Server - http://localhost:8888 * AngularJS frontend (API Gateway) - http://localhost:8080 * Customers, Vets and Visits Services - random port, check Eureka Dashboard +* Tracing Server (Zipkin) - http://localhost:9411 ## Understanding the Spring Petclinic application with a few diagrams <a href="https://speakerdeck.com/michaelisvy/spring-petclinic-sample-application">See the presentation here</a> diff --git a/pom.xml b/pom.xml index 15abd09fca6ab8352e25f475dd356e606cc324f1..d81224f72bf6660554ead779d6891c0c286c35e2 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,7 @@ <module>spring-petclinic-discovery-server</module> <module>spring-petclinic-api-gateway</module> <module>spring-petclinic-monitoring</module> + <module>spring-petclinic-tracing-server</module> </modules> <properties> diff --git a/spring-petclinic-api-gateway/pom.xml b/spring-petclinic-api-gateway/pom.xml index 10dfc9d5653dbaaf9c8df82aa949db67c5664206..4bb66d39fffb5a144a7c16fcb2390652d5b6f25a 100644 --- a/spring-petclinic-api-gateway/pom.xml +++ b/spring-petclinic-api-gateway/pom.xml @@ -72,6 +72,10 @@ <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-sleuth-zipkin</artifactId> + </dependency> <dependency> <groupId>org.springframework.boot</groupId> diff --git a/spring-petclinic-customers-service/pom.xml b/spring-petclinic-customers-service/pom.xml index 85a6e8601c41f4a521b9893fd35cb37e58441fd3..f5bc0763e45df64a19bdc194a07357122a1c86f6 100644 --- a/spring-petclinic-customers-service/pom.xml +++ b/spring-petclinic-customers-service/pom.xml @@ -68,6 +68,10 @@ <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-sleuth-zipkin</artifactId> + </dependency> <dependency> <groupId>org.springframework.boot</groupId> diff --git a/spring-petclinic-tracing-server/pom.xml b/spring-petclinic-tracing-server/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..0d283299a1c7b8049301e116ae29b43c6b5546a0 --- /dev/null +++ b/spring-petclinic-tracing-server/pom.xml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + 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> + + <groupId>org.springframework.samples.petclinic.visits</groupId> + <artifactId>spring-petclinic-zipkin-server</artifactId> + <version>1.4.2</version> + <packaging>jar</packaging> + + <name>spring-petclinic-tracing-server</name> + <description>Zipkin server with UI</description> + + <parent> + <groupId>org.springframework.samples</groupId> + <artifactId>spring-petclinic-microservices</artifactId> + <version>1.4.2</version> + </parent> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> + <java.version>1.8</java.version> + </properties> + + <dependencies> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-starter-config</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-starter-eureka</artifactId> + </dependency> + <dependency> + <groupId>io.zipkin.java</groupId> + <artifactId>zipkin-server</artifactId> + </dependency> + + <dependency> + <groupId>io.zipkin.java</groupId> + <artifactId>zipkin-autoconfigure-ui</artifactId> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + </plugin> + </plugins> + </build> + +</project> diff --git a/spring-petclinic-tracing-server/src/main/java/org/springframework/samples/petclinic/tracing/ZipkinServer.java b/spring-petclinic-tracing-server/src/main/java/org/springframework/samples/petclinic/tracing/ZipkinServer.java new file mode 100644 index 0000000000000000000000000000000000000000..06c3a409358f7bb8324f2b880bff3271a3e83773 --- /dev/null +++ b/spring-petclinic-tracing-server/src/main/java/org/springframework/samples/petclinic/tracing/ZipkinServer.java @@ -0,0 +1,19 @@ +package org.springframework.samples.petclinic.tracing; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import zipkin.server.EnableZipkinServer; + +/** + * @author Antoine Rey + */ +@EnableDiscoveryClient +@SpringBootApplication +@EnableZipkinServer +public class ZipkinServer { + + public static void main(String[] args) { + SpringApplication.run(ZipkinServer.class, args); + } +} diff --git a/spring-petclinic-tracing-server/src/main/resources/bootstrap.yml b/spring-petclinic-tracing-server/src/main/resources/bootstrap.yml new file mode 100644 index 0000000000000000000000000000000000000000..abdd9f5cdcbe12ab6d05b2af39f2dd6402f2feaa --- /dev/null +++ b/spring-petclinic-tracing-server/src/main/resources/bootstrap.yml @@ -0,0 +1,6 @@ +spring: + cloud: + config: + uri: http://localhost:8888 + application: + name: tracing-server diff --git a/spring-petclinic-vets-service/pom.xml b/spring-petclinic-vets-service/pom.xml index 0558d5e82c6ab1661bbdac964def8ffd0e86554b..9abef8bfd0d80c99f9357626009f315c901dbed8 100644 --- a/spring-petclinic-vets-service/pom.xml +++ b/spring-petclinic-vets-service/pom.xml @@ -77,6 +77,10 @@ <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-sleuth-zipkin</artifactId> + </dependency> <dependency> diff --git a/spring-petclinic-visits-service/pom.xml b/spring-petclinic-visits-service/pom.xml index c29065097af1d6c873c6249590848651eccb5f94..06f723912606eb9e838cb9d0a76120c6a8c9c59f 100644 --- a/spring-petclinic-visits-service/pom.xml +++ b/spring-petclinic-visits-service/pom.xml @@ -60,6 +60,10 @@ <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-sleuth-zipkin</artifactId> + </dependency> <dependency> <groupId>org.springframework.boot</groupId>