У меня была возможность поиграть с 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@EnableEurekaServerpublic 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.ymlserver: port: 8761eureka: 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@EnableEurekaClientpublic 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.ymlspring: application: name: sample-config profiles: active: nativeeureka: 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.ymlspring: cloud: config: server: native: searchLocations: classpath:/configserver: port: 8888 |
Сервер конфигурации запускается на порту 8888 и предоставляет конфигурацию из пути к классам. В реальном приложении конфигурация может быть настроена на загрузку из центрального репозитория git, что обеспечивает чистый способ доступа к свойствам версий и возможность централизованного управления свойствами. В этом конкретном случае, поскольку он предоставляет свойства для двух микросервисов, в пути к классам есть два набора файлов, которые предоставляют соответствующие свойства вызывающему приложению:
|
1
2
3
4
|
---#sample-pong.ymlreply: message: Pong |
|
1
2
3
4
|
---# sample-ping.ymlsend: 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. |

