Рубрики
Без рубрики

Вступление к “Смотрителю зоопарка Весеннего облака”

Научитесь обнаруживать службы с помощью Spring и Zookeeper.

Автор оригинала: baeldung.

1. введение

В этой статье мы познакомимся с Zookeeper и с тем, как он используется для обнаружения служб, которые используются в качестве централизованных знаний о службах в облаке.

Spring Cloud Zookeeper обеспечивает интеграцию Apache Zookeeper для приложений Spring Boot с помощью автоматической настройки и привязки к среде Spring.

2. Настройка обнаружения служб

Мы создадим два приложения:

  • Приложение, которое будет предоставлять услугу (в этой статье упоминается как Поставщик услуг )
  • Приложение, которое будет потреблять эту услугу (называется Потребитель услуг )

Apache Zookeeper будет выступать в качестве координатора в нашей настройке обнаружения служб. Инструкции по установке Apache Zookeeper доступны по следующей ссылке /.

3. Регистрация Поставщика услуг

Мы включим регистрацию службы, добавив зависимость spring-cloud-starter-zookeeper-discovery и используя аннотацию @EnableDiscoveryClient в главном приложении.

Ниже мы покажем этот процесс шаг за шагом для службы, которая возвращает “Hello World!” в ответ на запросы GET.

3.1. Зависимости Maven

Во-первых, давайте добавим необходимые spring-cloud-starter-zookeeper-discovery , spring-web , spring-cloud-зависимости | и spring-boot-starter | зависимости в наш pom.xml файл:


    
        org.springframework.boot
	spring-boot-starter
	2.2.6.RELEASE
    
    
        org.springframework
	spring-web
        5.1.14.RELEASE
    
    
        org.springframework.cloud
        spring-cloud-starter-zookeeper-discovery
     


    
        
            org.springframework.cloud
            spring-cloud-dependencies
            Hoxton.SR4
            pom
            import
        
    

3.2. Аннотации поставщика услуг

Далее мы будем аннотировать наш основной класс с помощью @EnableDiscoveryClient . Это сделает HelloWorld обнаружение приложений осведомленным:

@SpringBootApplication
@EnableDiscoveryClient
public class HelloWorldApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class, args);
    }
}

И простой контроллер:

@GetMapping("/helloworld")
public String helloWorld() {
    return "Hello World!";
}

3.3. Конфигурации YAML

Теперь давайте создадим файл YAML Application.yml , который будет использоваться для настройки уровня журнала приложений и информирования Zookeeper о том, что приложение включено для обнаружения.

Имя приложения, с которым регистрируется Zookeeper, является самым важным. Позже в потребителе службы клиент симулирует будет использовать это имя во время обнаружения службы:

spring:
  application:
    name: HelloWorld
  cloud:
    zookeeper:
      discovery:
        enabled: true
logging:
  level:
    org.apache.zookeeper.ClientCnxn: WARN

Приложение spring boot ищет zookeeper на порту по умолчанию 2181. Если zookeeper находится где-то в другом месте, необходимо добавить конфигурацию:

spring:
  cloud:
    zookeeper:
      connect-string: localhost:2181

4. Потребитель услуг

Теперь мы создадим потребителя услуг REST и зарегистрируем его с помощью клиента Spring Netflix.

4.1. Зависимость Maven

Во-первых, давайте добавим необходимые spring-cloud-starter-zookeeper-discovery , spring-web , spring-cloud-dependencies , spring-boot-starter-actuator и spring-cloud-starter-feign зависимости к нашему pom.xml файл:


    
        org.springframework.cloud
        spring-cloud-starter-zookeeper-discovery
    
    
        org.springframework.boot
        spring-boot-starter-actuator
        2.2.6.RELEASE
    
    
        org.springframework.cloud
        spring-cloud-starter-feign
    


    
        
            org.springframework.cloud
            spring-cloud-dependencies
            Hoxton.SR4
            pom
            import
        
    


4.2. Аннотации потребителей услуг

Как и в случае с поставщиком услуг, мы будем аннотировать основной класс с помощью @EnableDiscoveryClient , чтобы он был осведомлен об обнаружении:

@SpringBootApplication
@EnableDiscoveryClient
public class GreetingApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(GreetingApplication.class, args);
    }
}

4.3. Откройте Для Себя Сервис С Притворным Клиентом

Мы будем использовать интеграцию Spring Cloud, проект Netflix, который позволяет определить декларативный клиент REST. Мы объявляем, как выглядит URL-адрес, и симулируем подключение к службе REST.

Клиент Feign импортируется через пакет spring-cloud-starter-feign . Мы будем аннотировать @Configuration с @EnableFeignClients , чтобы использовать его в приложении.

Наконец, мы аннотируем интерфейс с помощью @FeignClient(“имя службы”) и автоматически подключаем его к вашему приложению, чтобы мы могли получить доступ к этой службе программно.

Здесь , в аннотации @FeignClient(name) , мы ссылаемся на имя службы производителя службы, которую мы ранее создали.

@Configuration
@EnableFeignClients
@EnableDiscoveryClient
public class HelloWorldClient {
 
    @Autowired
    private TheClient theClient;

    @FeignClient(name = "HelloWorld")
    interface TheClient {
 
        @RequestMapping(path = "/helloworld", method = RequestMethod.GET)
        @ResponseBody
	String helloWorld();
    }
    public String HelloWorld() {
        return theClient.HelloWorld();
    }
}

4.4. Класс контроллера

Ниже приведен простой класс контроллера службы, который вызовет функцию поставщика услуг в нашем классе притворного клиента для использования службы (сведения о которой абстрагируются с помощью обнаружения службы) через введенный интерфейс helloWorldClient object и отобразит его в ответ:

@RestController
public class GreetingController {
 
    @Autowired
    private HelloWorldClient helloWorldClient;

    @GetMapping("/get-greeting")
    public String greeting() {
        return helloWorldClient.helloWorld();
    }
}

4.5. Конфигурации YAML

Затем мы создаем файл YAML Application.yml , очень похожий на тот, который использовался ранее. Это настраивает уровень журнала приложения:

logging:
  level:
    org.apache.zookeeper.ClientCnxn: WARN

Приложение ищет Zookeeper на порту по умолчанию 2181 . Если Zookeeper находится где-то в другом месте, необходимо добавить конфигурацию:

spring:
  cloud:
    zookeeper:
      connect-string: localhost:2181

5. Тестирование установки

Служба отдыха Hello World регистрируется в Zookeeper при развертывании. Затем служба Приветствие , действующая в качестве потребителя службы, вызывает службу HelloWorld , используя притворный клиент.

Теперь мы можем создавать и запускать эти две службы.

Наконец, мы направим ваш браузер на http://localhost:8083/get-greeting , и он должен отображаться:

Hello World!

6. Заключение

В этой статье мы рассмотрели, как реализовать обнаружение служб с помощью Spring Cloud Zookeeper , и мы зарегистрировали службу под названием HelloWorld на сервере Zookeeper, которая будет обнаружена и использована службой Приветствия с помощью Притворного клиента , не зная деталей ее местоположения.

Как всегда, код для этой статьи доступен на GitHub .