Статьи

Обучение Spring-Cloud — инфраструктура и настройка

У меня была возможность поиграть с Spring-Cloud, чтобы создать пример набора готовых к работе облачных микросервисов, и я очень впечатлен тем, как Spring-Cloud позволяет различным компонентам инфраструктуры и службам эффективно работать вместе.

Я привык создавать микросервисы на основе стека Netflix OSS и обычно в стеке Netflix Eureka считается хабом, с помощью которого микросервисы регистрируют себя и обнаруживают друг друга. В духе этой модели я хотел попробовать серию сервисов, которые выглядят так:

Sample-пинг-понг

Здесь есть 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 предоставляет централизованный сервер конфигурации, который микросервисы могут использовать для загрузки своих свойств. Обычно микросервисы могут пойти одним из двух способов:

  1. Используйте Eureka в качестве концентратора и найдите службы конфигурации
  2. Воспользуйтесь услугами настройки и найдите 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»:

Весна-Cloud-Eureka

Сервер конфигурации предоставляет свойства вызывающим приложениям через конечные точки с шаблоном: /{application}/{profile}[/{label}]

Таким образом, чтобы получить свойства для приложения «sample-pong», приложение использует внутренний URL-адрес: http://localhost:8888/sample-pong/default

а для приложения «sample-ping» свойства могут быть получены из http://localhost:8888/sample-ping/default

На этом мы завершаем детали, касающиеся запуска компонентов инфраструктуры системы, готовой к использованию в облаке. Я буду следить за тем, как можно разрабатывать микросервисы, использующие эти компоненты инфраструктуры.

Ссылка: Обучение Spring-Cloud — инфраструктура и конфигурация от нашего партнера JCG Биджу Кунджуммена из блога all and sundry.