У меня была возможность поиграть с Spring-Cloud, чтобы создать пример набора готовых к работе облачных микросервисов, и я очень впечатлен тем, как Spring-Cloud позволяет различным компонентам инфраструктуры и службам эффективно работать вместе.
Я привык создавать микросервисы на основе стека Netflix OSS и обычно в стеке Netflix Eureka считается хабом, с помощью которого микросервисы регистрируют себя и обнаруживают друг друга. В духе этой модели я хотел попробовать серию сервисов, которые выглядят так:
Здесь есть 2 микросервиса:
- Сервис образца-понга, который отвечает на сообщения «ping»
- Сервис пробоотборного пинга, использующий микро-сервис pong
И есть два компонента инфраструктуры:
- Пример конфигурации, обеспечивающий централизованную настройку для двух микросервисов
- Эврика, которая является центральным узлом, предоставляющим сервисам возможность регистрироваться и открывать другие сервисы.
Итак, для начала я расскажу о том, как я использовал Spring-Cloud для разработки двух компонентов инфраструктуры, и расскажу, как можно разработать микросервисы для использования этих компонентов.
- Весь проект доступен на моем сайте github .
эврика
Spring-cloud упрощает запуск экземпляра Eureka, все, что требуется, — это класс по следующим направлениям:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
package org.bk.eureka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication. class , args); } } |
Можно запустить несколько экземпляров Eureka и настроить их на отказоустойчивую совместную работу, хотя здесь я просто хочу демонстрационный автономный экземпляр Eureka, и это можно сделать с помощью конфигурации, которая выглядит следующим образом, по сути запускает eureka на порту 8761. и в автономном режиме, не пытаясь искать сверстников:
01
02
03
04
05
06
07
08
09
10
11
|
--- # application.yml server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false |
Конфигурационный сервер
Spring-Cloud предоставляет централизованный сервер конфигурации, который микросервисы могут использовать для загрузки своих свойств. Обычно микросервисы могут пойти одним из двух способов:
- Используйте Eureka в качестве концентратора и найдите службы конфигурации
- Воспользуйтесь услугами настройки и найдите Eureka
Я лично предпочитаю первый подход к Eureka, в этом примере сервер конфигурации регистрируется в Eureka, а когда появляются микросервисы, они сначала проверяют в Eureka, находят службу конфигурации и используют службу для загрузки своих свойств.
Сервер конфигурации также прост в написании с использованием Spring-cloud, ниже приведен весь необходимый код:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
package org.bk.configserver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableConfigServer @EnableEurekaClient public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication. class , args); } } |
и конфигурация, которая регистрирует этот сервис с Eureka:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
--- # bootstrap.yml spring: application: name: sample-config profiles: active: native eureka: instance: nonSecurePort: ${server.port: 8888 } client: serviceUrl: defaultZone: http: //${eureka.host:localhost}:${eureka.port:8761}/eureka/ |
01
02
03
04
05
06
07
08
09
10
11
|
--- # application.yml spring: cloud: config: server: native : searchLocations: classpath:/config server: port: 8888 |
Сервер конфигурации запускается на порту 8888 и предоставляет конфигурацию из пути к классам. В реальном приложении конфигурация может быть настроена на загрузку из центрального репозитория git, что обеспечивает чистый способ доступа к свойствам версий и возможность централизованного управления свойствами. В этом конкретном случае, поскольку он предоставляет свойства для двух микросервисов, в пути к классам есть два набора файлов, которые предоставляют соответствующие свойства вызывающему приложению:
1
2
3
4
|
--- #sample-pong.yml reply: message: Pong |
1
2
3
4
|
--- # sample-ping.yml send: message: Ping |
Запуск Eureka и сервера конфигурации
Поскольку оба эти приложения основаны на Spring-boot, их можно запустить, выполнив следующую команду:
1
|
mvn spring-boot:run |
После того, как Eureka и сервер конфигурации будут настроены корректно, Eureka предоставляет удобный интерфейс с подробной информацией о зарегистрированных службах, в этом случае сервер конфигурации появляется с именем «SAMPLE-CONFIG»:
Сервер конфигурации предоставляет свойства вызывающим приложениям через конечные точки с шаблоном: /{application}/{profile}[/{label}]
Таким образом, чтобы получить свойства для приложения «sample-pong», приложение использует внутренний URL-адрес: http://localhost:8888/sample-pong/default
а для приложения «sample-ping» свойства могут быть получены из http://localhost:8888/sample-ping/default
На этом мы завершаем детали, касающиеся запуска компонентов инфраструктуры системы, готовой к использованию в облаке. Я буду следить за тем, как можно разрабатывать микросервисы, использующие эти компоненты инфраструктуры.
- Код этих примеров доступен в моём репозитории github .
Ссылка: | Обучение Spring-Cloud — инфраструктура и конфигурация от нашего партнера JCG Биджу Кунджуммена из блога all and sundry. |