Введение в Spring Cloud Zookeeper

1. Вступление

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

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

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

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

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

  • Поставщик услуг ** _) _

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

Consumer__ ** )

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

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

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

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

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

Сначала добавим требуемые https://search.maven.org/classic/ search%7Cga%7C1%7Cspring-cloud-starter-zookeeper-discovery[spring-cloud-starter-zookeeper-discovery], spring-web , https://search.maven . org/classic/ search% 7Cga% 7C1% 7Cg% 3A% 22org.springframework.cloud% 22% 20% 20AND% 20a% 3A% 22spring-cloud-dependencies% 22[весна-облако-зависимости]и spring-boot-starter зависимости от наших pom.xml file:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>1.5.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
        <version>4.3.7.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        <version>1.0.3.RELEASE</version>
     </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Brixton.SR7</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

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, является наиболее важным. Позже в потребителе службы клиент feign будет использовать это имя во время обнаружения службы:

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

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

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

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

Теперь мы создадим потребителя службы REST и зарегистрируем его, используя spring Netflix Feign Client

4.1. Maven Dependency

Сначала добавим требуемые https://search.maven.org/classic/ search%7Cga%7C1%7Cspring-cloud-starter-zookeeper-discovery[spring-cloud-starter-zookeeper-discovery], spring-web , https://search.maven . org/classic/ search% 7Cga% 7C1% 7Cg% 3A% 22org.springframework.cloud% 22% 20% 20AND% 20a% 3A% 22spring-cloud-dependencies% 22[весна-облако-зависимости], spring-boot-starter-actuator и spring-cloud-starter-feign зависимости от нашего pom.xml файла:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        <version>1.0.3.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
        <version>1.5.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-feign</artifactId>
        <version>1.2.5.RELEASE</version>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Brixton.SR7</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

4.2. Сервисные потребительские аннотации

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

@SpringBootApplication
@EnableDiscoveryClient
public class GreetingApplication {

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

4.3. Откройте сервис с Feign Client

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

Feign Client импортируется через https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.springframework.cloud%22%20AND%20a%3A%22spring-cloud-starter- feign% 22[весна-облако-стартер-симулятор] пакет. Мы аннотируем @ Configuration с помощью @ EnableFeignClients , чтобы использовать его в приложении.

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

Здесь в аннотации @ FeignClient (name = «HelloWorld») мы ссылаемся на service-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 и отображать ее в ответ:

@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. Тестирование настройки

Служба HelloWorld REST регистрируется в Zookeeper при развертывании. Затем служба Greeting , выступающая в роли потребителя службы, вызывает службу HelloWorld с помощью клиента Feign.

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

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

Hello World!

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

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