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 .