Связанный
-
Spring Cloud Combat Series (1) — регистрация и обнаружение сервисов Eureka
-
Spring Cloud Combat Series (3) — Декларативное притворство клиента
-
Spring Cloud Combat Series (6) — Распределенный центр конфигурации Spring Cloud Config
-
Spring Cloud Combat Series (7) — отслеживание служебных ссылок Spring Cloud Sleuth
-
Боевая серия Spring Cloud (восемь) — мониторинг сервиса Micro Spring Boot Admin
-
Spring Cloud Combat Series (9) — Аутентификация и авторизация службы Spring Cloud OAuth 2.0
-
Практическая серия Spring Cloud (10) — Единый вход JWT и Spring Security OAuth
предисловие
Spring Cloud Sleuth
Основная функция состоит в том, чтобыРаспределенные системыпоставкаРешения для отслеживания, и совместим сZipkin
, просто нужноpom.xml
Включите соответствующийполагатьсяВот и все. В этой статье в основном говорится окомпонент отслеживания услуг Zipkin
,Spring Cloud Sleuth
ИнтегрированныйZipkin
компоненты. В основном используется длясобиратьс каждогоГетерогенная системаизДанные мониторинга в реальном времениИспользуется для отслеживанияМикросервисная архитектуравнизпроблема с задержкой системы.
текст
1. Связанные термины
1.1. Span
Span
является основнымрабочая единица, используется для описания один разRPC
перечислить,Span
через64
немногоspanId
в видеУникально идентифицирует.Zipkin
серединаSpan
Есть и другие данные, такие какРезюме,Отметка времени событий,Ключевые ценности Примечания (tags
) а такжерасписание ID
(как правилоIP
адрес).Span
в постоянном запуске и остановке во время записиинформация о времени,ОдинSpan
Однажды созданный, он должен остановиться в какой-то момент в будущем.
1.2. Trace
наборSpan
состоит из одногоДерево. Например, если вы работаете с большимРаспределенные системы, возможно, потребуется создатьTrace
.
1.3. Annotation
выражатьОсновной список выноски,ОдинAnnotation
можно понимать какSpan
в жизненном циклеважный моментизСнимок данныхТакойAnnotation
как правило, содержитмомент возникновения(timestamp
),тип события(value
),Конечная точка(endpoint
) и другую информацию. вAnnotation
изтип событияСодержит следующие четыре категории:
- cs - Client Sent
клиентИнициирование запроса, этоAnnotion
описывает этоSpan
Начинать.
- sr - Server Received
Серверполучить запрос иГотов начатьсправиться с этим, еслиsr
минусcs
изотметка времениможет получитьсетевая задержка.
- ss - Server Sent
Серверзавершить обработку запроса, еслиss
минусsr
изотметка времени, вы можете получитьСерверВремя, потраченное на обработку запроса.
- cr - Client Received
клиентуспешно полученСерверответ, еслиcr
минусcs
изотметка времени, вы можете получитьвесь запроспотребляетсяобщее время.
2. Структура проекта
Этот случай в основном состоит изчетыре модулясочинение:
-
eureka-server: в видеРеестр услуг.
-
zipkin-server: в видеСервисный центр отслеживания ссылок, отвечает за хранениесвязать данные.
-
service-hi: выставитьТестовый интерфейс, в то же время, какотслеживание ссылокизСервер,ответственныйгенерировать данные ссылки.
-
service-zuul: в видешлюз маршрутизации,ответственныйзапрос на переадресацию, в то же время, какотслеживание ссылокизклиент,производитьсвязать данные, и загрузить в
zipkin-server
.
существует8761
портвключиeureka-server
Реестр услуг, вы можете обратиться к предыдущей статье, здесь творение демонстрироваться не будет.
3. Соберите zipkin-сервер
создать новыйSpring Boot
прикладной модульzipkin-server
,этоpom.xml
Полные зависимости следующие:
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>io.github.ostenant.springcloud</groupId>
<artifactId>zipkin-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zipkin-server</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<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>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
В классе входа приложения добавьте аннотацию@EnableZipkinServer
ОткрытымZipkin Server
функция.
@EnableZipkinServer
@EnableEurekaClient
@SpringBootApplication
public class ZipkinServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZipkinServerApplication.class, args);
}
}
существуетконфигурационный файл application.yml
Указанный номер порта службы9411
, и кEureka
регистрационный центррегистрация службы.
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
server:
port: 9411
spring:
application:
name: zipkin-server
4. Создайте сервис-привет
создать новыйSpring Boot
прикладной модульservice-hi
, в егоpom.xml
введен в引入起步依赖 spring-cloud-starter-zipkin
, полные зависимости следующие:
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>io.github.ostenant.springcloud</groupId>
<artifactId>service-hi</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-client</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
В своемконфигурационный файл application.yml
через элементы конфигурацииspring.zipkin.base-url
уточнитьzipkin server
адрес г.
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8763
spring:
application:
name: service-hi
zipkin:
# base-url: http://localhost:9411/
# 若在同一个注册中心的话可以启用自动发现,省略base-url
locator:
discovery:
enabled: true #自动发现
sleuth:
sampler:
percentage: 1.0
ужеZipKin
клиентбыл интегрирован, и, наконец,Класс запуска приложенияразоблачитьAPI
интерфейслегко проверить.
@SpringBootApplication
@EnableEurekaClient
@RestController
public class ServiceHiApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceHiApplication.class, args);
}
@Value("${server.port}")
private String port;
@RequestMapping("/hi")
public String home(@RequestParam String name) {
return "Hi " + name + ", I am from port: " + port;
}
}
5. Построить сервис-зуул
создать новыйSpring Boot
прикладной модульservice-zuul
,существуетpom.xml
импортировать зависимостиspring-cloud-starter-zipkin
, полные зависимости следующие:
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>io.github.ostenant.springcloud</groupId>
<artifactId>service-zuul</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>service-zuul</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
в егоконфигурационный файл application.yml
через элементы конфигурацииspring.zipkin.base-url
уточнитьzipkin server
адрес г. Также укажитеservice-hi
на основеzuul
изпуть обслуживанияпрефикс совпадения.
server:
port: 8769
spring:
application:
name: service-zuul
client:
service-url:
defaultZone: http://localhost:8761/eureka/
sleuth:
sampler:
percentage: 1.0
zipkin:
# base-url: http://localhost:9411/
# 若在同一个注册中心的话可以启用自动发现,省略base-url
locator:
discovery:
enabled: true #自动发现
zuul:
routes:
api-hi:
path: /api-hi/**
serviceId: service-hi
Здесь вы можете найти, импортироватьZipKin
Сервис нужен тольконаправляющая зависимость,свойства конфигурацииВсего два шага. в приложениистартовый классиспользовать на@EnableZuulProxy
Аннотация включенашлюз маршрутизации.
@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class ServiceZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceZuulApplication.class, args);
}
}
6. Процесс отслеживания тестов
всемодуль отслеживания ссылокПосле завершения строительства подведем итоги:
-
построить один
zipkin server
в видеСсылка на сервисный центр. -
Дайте каждомуСлужитьвводить
zipkin
зависеть, настраиватьzipkin server
адрес.
Начать по порядку нижеeureka-server
,service-zipkin
,service-hi
иservice-zuul
. Получите доступ к сервисному шлюзу по адресу:http://localhost:8769/api-hi/hi?name=vainlgory, содержание ответа службы выглядит следующим образом:
Hi Vainlgory, I am from port: 8763
тогда посетитеhttp://localhost:9411
, т.е. доступZipKin
Предоставленная страница визуализации.
Этот интерфейс используется для отображенияZipKin Server
собралсвязать данные, в соответствии снаименование услуги,Время начала,Время окончания,время, потраченное на запроси другие условия, чтобы найти. нажмитеFind Tracks
кнопка для просмотра запрошенногоВремя звонка,потреблять времяИ попросилСостояние связи.
Нажмите на верхнююDependencies
кнопка для просмотра сервисазависимости.
7. Добавьте пользовательские данные в данные ссылки
Теперь нам нужно реализовать функцию: всвязать данныеплюс просилОператор. Этот случай вservice-zuul
Служба шлюзареализовано в.
-
создать новый
ZuulFilter
фильтр, который имеет типpost
тип,order
за900
, наФункция перехвата. -
в фильтреЛогические методы перехвата
run()
внутри, черезTracer
изaddTag()
метод плюснастроитьданные, в данном случае ссылкаОператор. -
также доступно здесьфильтрполучено втекущая ссылкаиз
traceld
Информация,traceld
в видесвязать данныеизУникально идентифицирует, который можно хранить вlog
В журнале удобно для последующих поисков, в этом случаеtraceld
Информация просто выводится на консоль. код показывает, как показано ниже:
@Component
public class LoggerFileter extends ZuulFilter {
@Autowired
private Tracer tracer;
@Override
public String filterType() {
return FilterConstants.POST_TYPE;
}
@Override
public int filterOrder() {
return 900;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
tracer.addTag("operator","forezp");
System.out.println(tracer.getCurrentSpan().traceIdString());
return null;
}
}
8. Используйте RabbitMQ для передачи данных ссылки
Преобразуйте сначалаzipkin-server
модуль проекта, в егоpom.xml
документ будетzipkin-server
Зависимости удаляются, добавляютсяspring-cloud-sleuth-zipkin-stream
иspring-cloud-starter-stream-rabbit
Зависимости настроены следующим образом:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
существуетzipkin-server
файл конфигурацииapplication.yml
плюсRabbitMQ
конфигурация, в том числеИмя процессора,порт,имя пользователя,пароль, код показан ниже:
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
В стартовом классе приложенияZipkinServerApplication
верхняя нота@EnableZipkinServer
заменить на аннотацию@EnableZipkinStreamServer
, наZipkinStreamServer
, код показан ниже:
@EnableEurekaClient
@SpringBootApplication
@EnableZipkinStreamServer
public class ZipkinServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZipkinServerApplication.class, args);
}
}
Теперь к реформеZipkin Client
(включаютservice-zuul
иservice-hi
два модуля) соответственно в ихpom.xml
документ будетspring-cloud-starter-zipkin
Зависимость изменена наspring-cloud-sleuth-zipkin-stream
иspring-cloud-starter-stream-rabbit
, код показан ниже:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
Спередиzipkin-server
модули, а в конфигурационном файлеapplicayion.yml
плюсRabbitMQ
Конфигурация. Таким образом, ссылказагрузка данныхотHTTP
использовать вместо этогокомпонент генерации сообщений RabbitMQ
Путь.
9. Храните данные о ссылках в базе данных MySQL.
В приведенном выше примереZipkin Server
хранить данные вОЗУ, после применения услугиперезагружать,предыдущийВсе данные ссылки потеряны, то необходимо ввестимеханизм сохранения.Zipkin
поддержка будетсвязать данныесохранить вMySQL
,Elasticsearch
иCassandra
в базе данных. В этом разделе объясняется, как использоватьMySQL
место хранения.
Zipkin Client
Есть два способасвязать данныетрансфер вZipkin Server
один должен использоватьHTTP
, другой должен использоватьRabbitMQ
.Zipkin Server
этими двумя способамиСобирать данные о ссылках, и хранится вMySQL
середина.
9.1. Использование HTTP для передачи данных о ссылке
существуетzipkin-server
модульныйpom.xml
файл плюс следующие зависимости:
-
Zipkin Server
зависимостьzipkin-server
-
Zipkin
изMySQL
зависимости хранилищаzipkin-storage-mysql
-
Zipkin Server
изUI
зависимость интерфейсаzipkin-autoconfigure-ui
-
MySQL
Разъем зависит отmysql-connector-java
-
JDBC
изЗависит от запускаspring-boot-starter-jdbc
код показывает, как показано ниже:
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>1.19.0</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-storage-mysql</artifactId>
<version>1.19.0</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
существуетzipkin-server
модульныйконфигурационный файл application.yml
плюсисточник данныхконфигурация, в том числебаза данныхизUrl
,имя пользователя,парольидрайвер подключения, и необходимо настроитьzipkin.storage.type
заmysql
, код показан ниже:
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/spring-cloud-zipkin?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: 123456
zipkin:
storage:
type: mysql
Кроме того, необходимоMySQL
Поместите базу данных в базе данныхсценарий инициализации, который создаетzipkin_spans
,zipkin_annotations
иzipkin_dependencies
эти таблицы.
CREATE TABLE IF NOT EXISTS zipkin_spans (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL,
`id` BIGINT NOT NULL,
`name` VARCHAR(255) NOT NULL,
`parent_id` BIGINT,
`debug` BIT(1),
`start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
`duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`) COMMENT 'ignore insert on duplicate';
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`) COMMENT 'for joining with zipkin_annotations';
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds';
ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';
ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range';
CREATE TABLE IF NOT EXISTS zipkin_annotations (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',
`span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
`a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',
`a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',
`a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',
`a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',
`endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',
`endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',
`endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',
`endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds';
ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';
ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces';
ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT 'for dependencies job';
CREATE TABLE IF NOT EXISTS zipkin_dependencies (
`day` DATE NOT NULL,
`parent` VARCHAR(255) NOT NULL,
`child` VARCHAR(255) NOT NULL,
`call_count` BIGINT,
`error_count` BIGINT
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);
Наконец, вам нужно запустить приложение в классе запускаZipkinServerApplication
ВведенныйMySQLStorage
изBean
, код показан ниже:
@Bean
public MySQLStorage mySQLStorage(DataSource datasource) {
return MySQLStorage.builder()
.datasource(datasource)
.executor(Runnable::run)
.build();
}
Просто нужны вышеуказанные шаги, вы можете использоватьHTTP
Передача инфекциисвязать данныесохранить вMySQL
в базе данных.
9.2 Использование RabbitMQ для передачи данных ссылки
Истории этого раздела используютсяRabbitMQ
передача данныхНа основе преобразования требуется только преобразованиеzipkin-server
инженерия.
существуетzipkin-server
Инжинирингpom.xml
добавлено в файлMySQL
изРазъем зависимости mysql-connector-java
иJDBC
изЗависит от запуска spring-boot-starter-jdbc
, код показан ниже:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
существуетzipkin-server
модульныйконфигурационный файл application.yml
плюсисточник данныхконфигурация, включая базу данныхUri
,имя пользователя,парольидрайвер подключения, такая же конфигурацияzipkin.storage.type
заmysql
, код показан ниже:
spring:
datasource:
url: jdbc:mysql://localhost:3306/spring-cloud-zipkin?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
zipkin:
storage:
type: mysql
Кроме того, необходимоMySQL
Инициализировать в базе данныхсценарий базы данных, как и в предыдущем разделе.
10. Храните данные ссылок в ElasticSearch
существуетПараллелизм высокийслучае, использоватьMySQL
место хранениясвязать данныеОчевидно, необоснованно, тогда вы можете использоватьElasticSearch
как хранилище.
Загрузить и установитьElasticSearch
иKibana
, адрес загрузкиwoohoo.elastic.co/products/horrible…. Запустите после завершения установки, гдеElasticSearch
изНомер порта по умолчаниюза9200
,Kibana
изномер порта по умолчаниюза5601
.
Этот раздел находится вРаздел 8на основе трансформации. первый вpom.xml
добавлено в файлzipkin
зависимости иzipkin-autoconfigure-storage-elasticsearch-http
Зависимость, код выглядит следующим образом:
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin</artifactId>
<version>1.28.1</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-storage-elasticsearch-http</artifactId>
<version>1.28.1</version>
</dependency>
в файле конфигурации приложенияapplication.yml
плюсZipkin
конфигурация, настроенныйzipkin
изтип хранения(type
) заElasticsearch
,в использованиикомпоненты хранения(StorageComponent
)заElasticsearch
, а затем нужно настроитьElasticsearch
,включаютhosts
(можно настроитьнесколько реальныхНапример, с“,”
разделены). Конкретный код конфигурации выглядит следующим образом:
zipkin:
storage:
type: elasticsearch
StorageComponent: elasticsearch
elasticsearch:
cluster: elasticsearch
max-requests: 30
index: zipkin
index-shards: 3
index-replicas: 1
hosts: localhost:9200
Просто заполните эти конфигурации,Zipkin Server
изсвязать данныеможно хранить вElasticSearch
в.
11. Отображение данных ссылки с помощью Kibana
В предыдущем разделе было описано, каксвязать данныесохранить вElasticSearch
середина,ElasticSearch
может иKibana
в сочетании, будетсвязать данныеотображается вKibana
начальство. Запустить после завершения установкиKibana
,Kibana
По умолчанию это будетместный портза9200
изElasticSearch
Прочитать данные.Kibana
изпорт по умолчаниюза5601
,доступKibana
домашняя страницаhttp://localhost:5601
.
нажмитеManagement
кнопку, а затем щелкнитеAdd New
,добавить однуindex
. предыдущий разделElasticSearch
написать всвязать данныеизindex
настроенzipkin
,существуетKibana
Заполните интерфейсzipkin-*
, нажмитеCreate
кнопка, созданнаяindex
, нажмитеDiscover
, который появляется на страницесвязать данные.
Ссылаться на
- Фан Чжипэн «Глубокое понимание Spring Cloud и построения микросервисов»
Добро пожаловать в технический публичный аккаунт: Zero One Technology Stack
Эта учетная запись будет продолжать делиться сухими товарами серверных технологий, включая основы виртуальных машин, многопоточное программирование, высокопроизводительные фреймворки, асинхронное ПО, промежуточное ПО для кэширования и обмена сообщениями, распределенные и микросервисы, материалы для обучения архитектуре и расширенные учебные материалы и статьи.