Использование Consul как Service Discovery и хранилище конфигурации. Часть 1

Что-то взбрело мне тут в голову отказываться от Netlfix стека при написании своих микросервисов. В основном что используется? Eureka — как service discovery, Cloud config (хотя он Spring’овый, но мне не шибко нравится). В данный момент я решил отказаться именно от них. Потом прикручу ещё что-то из Spring Cloud.

Consul изначально был росто как service discovery, теперь уже полноценный инструмент для обеспечения service mesh.

Ну что ж, запустим сначала его. Буду описывать пример для docker-compose (использую его, потому что обычно для проекта мало одного docker образа).

Создаём наш docker-compose.yml

version: "3.9"

services:
  consul:
    container_name: consul
    build: consul
    image: consul:1.14.2
    ports:
      - "8500:8500"

И можем запустить его через

docker-compose up -d

Чтобы убедиться, что наш Consul запустился перейдём на страницу http://localhost:8500/ui/ и увидим там главную страницу Consul

Главная страница Consul UI

Значит у нас тут всё хорошо. Теперь подключим наше приложение к Consul. Для этого нам потребуется пара spring boot starter’ов и лёгкой конфигурации

dependencies {
    implementation platform('org.springframework.cloud:spring-cloud-dependencies:2022.0.0')

    implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-consul-discovery'

}

После чего создаём наш класс для проверки подключения к Consul

package ru.maksimvoloshin.consul;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {
    public static void main(String... args) {
        SpringApplication.run(App.class, args);
    }
}

И добавляем немного конфигурации (хотя я уверен, что автоконфигурация подключится к Consul по умолчанию, на стандартный хост и порт Consul’а) в src/main/resources/application.yaml

spring:
  application:
    name: check-consul
  cloud:
    consul:
      discovery:
        enabled: true

Запускаем наше приложение и убеждаемся, что оно запустилось

Запуск Spring Boot приложения для проверки Consul

После чего открываем обратно Consul UI и видим там наше приложение

Приложение Spring Boot успешно зарегистрировалось в Consul

Для того, чтобы Consul понимал, что приложение живое, нам потребуется подключить Spring Boot Actuator, чтобы он нормально отдавал health check’и

    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-actuator'

После перезапуска приложения, мы увидим, что все health check’и в норме

Spring Boot подключился к Consul и всех health check’и у него в порядке

Таким образом мы заменили Netlfix’овскую Eureka на HashiCorp Consul.

В следующей части расскажу, как использовать встроенный в HashiCorp Consul Key/Value хранилище и подключить его к Spring Boot приложению.

Читайте также:

1 комментарий

  1. 05 Янв 2023

    […] что же, как я писал в первой части, мы подключили HashiCorp Consul в качестве Service Discovery. Теперь […]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *