предисловие
В этой статье используется облако Spring. Это статья 2.1.8RELEASE, version=Greenwich.SR3.
Эта статья основана на реализации предыдущей статьи eureka-server. Ссылаться на
Обзор
В распределенной системе из-за огромного количества сервисов для облегчения унифицированного управления файлами конфигурации сервисов требуется компонент распределенного центра конфигурации. Spring Cloud Config обеспечивает поддержку сервера и клиента для внешней конфигурации в распределенных системах.
Структура проекта, рассматриваемого в этой статье, представляет собой автономный режим сервера конфигурации и подходит для связывания хранилищ Git, а клиент конфигурации отображает данные файла конфигурации через сервер. Одновременное использование двух шин для имитации обновления файла конфигурации.
Создать проект config-сервера
Функция Config-сервера
- http для внешней конфигурации, API на основе ресурсов
- свойства шифрования и дешифрования
- Используйте встраиваемые приложения Spring Boot
1.1 Создайте сервер центра конфигурации: config-server
1.2 Добавьте связанные с pom.xml зависимости config-server
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
1.3 Добавьте приложение config-server для добавления информации о конфигурации
#加载本地文件配置
spring:
application:
name: config-server
profiles:
active: native #加载本地配置
cloud:
config:
server:
native: #加载本地目录文件
search-locations: /Users/xxxx/config-server
server:
port: 13081
eureka:
instance:
hostname: eureka1.client.com
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 10
client:
service-url:
defaultZone: http://eureka1.server.com:8701/eureka/,http://eureka2.server.com:8702/eureka/,http://eureka3.server.com:8703/eureka/
1.4 Добавьте аннотации к классу запуска ConfigServerApplication
package spring.cloud.demo.configserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
На данный момент построен автономный локальный конфиг-сервер
1.5 Создайте клиент центра конфигурации: config-client
1.6 Добавить связанные с pom зависимости config-client
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
1.7 Добавьте конфигурацию config-client, связанную с bootstrap.yml (обратите внимание, что это не application.yml)
bootstrap.yml
spring:
application:
name: config-client
cloud:
config:
label: master
profile: dev
fail-fast: true
uri: http://localhost:13081 #通过域名访问配置中心服务端
discovery:
enabled: true
eureka:
instance:
hostname: eureka1.client.com
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 10
client:
service-url:
defaultZone: http://eureka1.server.com:8701/eureka/,http://eureka2.server.com:8702/eureka/,http://eureka3.server.com:8703/eureka/
1.8 Создайте новый файл конфигурации config-client-dev.yml, запрошенный с сервера
Клиент получает правила пути для конфигурации ресурсов с сервера:
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
- /{application}-{profile}.properties
- /{label}/{application}-{profile}.properties
В этой статье принимается второе правило.
Содержание конфигурации:
spring:
application:
name: config-client
server:
port: 52601
eureka:
instance:
hostname: eureka1.client.com
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 10
client:
service-url:
defaultZone: http://eureka1.server.com:8701/eureka/,http://eureka2.server.com:8702/eureka/,http://eureka3.server.com:8703/eureka/
info: local-config-client-dev
Поместите только что созданный config-client-dev.yml в каталог /Users/xxxx/config-server конфигурации config-server.Если на config-server нет каталога конфигурации, по умолчанию используется каталог ресурсов.
1.9 ConfigClientApplication добавляет аннотации
package spring.cloud.demo.configclient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
2.0 Создать тестовый класс
Создайте тестовый контроллер в config-client: ConfigClientController
package spring.cloud.demo.configclient.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 测试是否能获取到配置信息的controller
* @auther: maomao
* @DateT: 2019-09-17
*/
@RestController
public class ConfigClientController {
@Value("${info}")
private String info;
@RequestMapping("/config/info")
public String info() {
return info;
}
}
2.1 Запуск связанных служб
Запустите eureka-server, config-server и config-client соответственно. доступ:http://localhost:52601/config/info, показывая следующее
Докажите, что локальный файл конфигурации вступил в силу.
2.2 Загрузка файлов конфигурации ресурсов из удаленного git
Измените файл конфигурации application.yml config-server:
##加载本地文件配置
#spring:
# application:
# name: config-server
# profiles:
# active: native #加载本地配置
# cloud:
# config:
# server:
# native: #加载本地目录文件
# search-locations: /Users/fengfujie/config-server
#加载远程git仓库资源文件
spring:
application:
name: config-server
cloud:
config:
server:
git:
# 配置git仓库的地址
uri: https://github.com/fengfujie25/sping-cloud-config
# git仓库的账号
username: xxxxxx
# git仓库的密码
password: xxxxxx
server:
port: 13081
eureka:
instance:
hostname: eureka1.client.com
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 10
client:
service-url:
defaultZone: http://eureka1.server.com:8701/eureka/,http://eureka2.server.com:8702/eureka/,http://eureka3.server.com:8703/eureka/
Перезапустите службу config-server. Затем обновите адрес http://localhost:52601/config/info и отобразите следующее
Докажите, что информация о конфигурации удаленного ресурса git была успешно получена.
2.3 Доступ к config-серверу по имени службы
Доступ ко всем вышеуказанным конфигурациям осуществляется через доменное имя.Чтобы обеспечить высокую доступность системы, поскольку центр обслуживания конфигурации производственной среды представляет собой конфигурацию кластера, все клиенты могут получить доступ только через имя службы.
Измените bootstrap.yml config-client
spring:
application:
name: config-client
cloud:
config:
label: master
profile: dev
fail-fast: true
#uri: http://localhost:13081 #通过域名访问配置中心服务端
discovery:
enabled: true
service-id: config-server #通过服务访问配置中心服务端
eureka:
instance:
hostname: eureka1.client.com
lease-renewal-interval-in-seconds: 5
lease-expiration-duration-in-seconds: 10
client:
service-url:
defaultZone: http://eureka1.server.com:8701/eureka/,http://eureka2.server.com:8702/eureka/,http://eureka3.server.com:8703/eureka/
spring.cloud.config.discovery.service-id: доступ к серверу центра конфигурации по имени службы
Перезапустите config-client и посетите http://localhost:5301/config/info.Если результат такой же, как [2.2], это означает, что информация о конфигурации вступила в силу, что доказывает, что доступ к config-серверу осуществляется через имя службы.
На этом настройка конфигурации интеграции весеннего облака завершена. Но есть проблема: если изменить конфигурацию ресурсов удаленного git-репозитория, проект не будет обновлен, поэтому информация о конфигурации не вступит в силу.
2.4 Динамическое обновление конфигурации сервера конфигурации
Динамически обновлять режим конфигурации config-serve
- Динамическое обновление на основе RabbitMQ
- Собственное обновление (псевдодинамическое обновление)
В этой статье используется относительно простой собственный метод обновления.
2.4.1 Добавление связанных зависимостей pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.4.2 Добавьте аннотацию @RefreshScope в ConfigClientController
package spring.cloud.demo.configclient.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @auther: maomao
* @DateT: 2019-09-17
*/
@RestController
@RefreshScope
public class ConfigClientController {
@Value("${info:error}")
private String info;
@RequestMapping("/config/info")
public String info() {
return info;
}
}
Этот метод также должен изменить содержимое аннотации @Value на @Value("${info:error}"), поскольку информация о конфигурации должна иметь значение по умолчанию при обновлении, иначе будет сообщено об ошибке.
2.4.3 Перезапустите config-клиент
Посетите http://localhost:5301/config/info, чтобы узнать, доступен ли сервис в обычном режиме.
Затем вы можете изменить информацию о конфигурации в репозитории git.
- Доступ через почту:http://localhost:5301/actuator/refresh, показывающий следующее:
- Обновите http://localhost:5301/config/info, результат покажет:
Докажите, что обновление вступило в силу.
Этот метод необходимо каждый раз обновлять вручную, что более проблематично. GitHub предоставляет возможность создавать веб-перехватчики без необходимости каждый раз обновлять вручную.
URL-адрес полезной нагрузки: URL-адрес обратного вызова после срабатывания.
Тип контента: формат данных, два обычно используют json
Секрет: строка, используемая для шифрования тела сообщения POST с использованием алгоритма HMAC.
События: список инициированных событий.
тип события | описывать |
---|---|
Just the push event |
Запускается, когда на складе есть толчок, событие по умолчанию |
Send me everything | пришли мне все |
Let me select individual events | Выберите отдельные события |
Таким образом, мы можем использовать механизм Webhook для запуска обновления клиента, но когда клиентов становится все больше и больше, механизм Webhook недостаточно элегантен, и менять Webhook каждый раз при добавлении клиента нереально.
На самом деле, Spring Cloud дает нам лучшее решение — Spring Cloud Bus.
Весенний облачный автобус будет обновлен позже.
Суммировать
В этой статье просто реализуется вызов конфигурации config-server и config-client для одномашинных и удаленных хранилищ git, а также простое динамическое обновление информации о конфигурации.
кодовый адрес
Каталог «Spring Cloud 2.X Xiaobai Tutorial»
- Руководство по реестру службы Eureka Server версии Spring Cloud 2.x
- Spring cloud 2.x версия Eureka Учебное пособие по поставщику клиентских услуг
- Руководство по обнаружению ленточных сервисов версии Spring Cloud 2.x (включая встроенный механизм предохранителей Hystrix)
- Версия Spring Cloud 2.x Руководство по обнаружению сервисов Feign (включая встроенный автоматический выключатель Hystrix)
- Руководство по шлюзу маршрутизации Zuul версии Spring Cloud 2.x
- Учебное пособие по распределенному центру конфигурации конфигурации Spring Cloud 2.x версии
- Руководство по автоматическому выключателю Hystrix Dashboard версии Spring Cloud 2.x
Пожалуйста, укажите источник,
- Контакт: 4272231@163.com