Статьи

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

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

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

  • Сервис образца-понга, который отвечает на сообщения «ping»
  • Служба пробного пинга, в которой используется микро-сервис «понг»

И есть два компонента инфраструктуры:

  • Пример конфигурации, обеспечивающий централизованную настройку для двух микросервисов
  • Эврика, которая является центральным узлом, предоставляющим сервисам возможность регистрироваться и открывать другие сервисы

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

эврика

Spring-cloud упрощает запуск экземпляра Eureka, все, что требуется, — это класс по следующим направлениям:

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. и в автономном режиме, не пытаясь искать сверстников:

---
# 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, ниже приведен весь необходимый код:

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:

---
# 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/
---
# application.yml
spring:
  cloud:
    config:
      server:
        native:
          searchLocations: classpath:/config

server:
  port: 8888

Сервер конфигурации запускается на порту 8888 и предоставляет конфигурацию из пути к классам. В реальном приложении конфигурация может быть настроена на загрузку из центрального репозитория git, таким образом предоставляя чистый путь к свойствам версий и возможность централизованно управлять свойствами. В этом конкретном случае, поскольку он предоставляет свойства для двух микросервисов, в пути к классам есть два набора файлов, которые предоставляют соответствующие свойства вызывающему приложению:

---
#sample-pong.yml
reply:
  message: Pong
---
# sample-ping.yml
send:
  message: Ping

Запуск Eureka и сервера конфигурации

Поскольку оба эти приложения основаны на Spring-boot, их можно запустить, выполнив следующую команду:

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 .