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

Весенний облачный автобус

Узнайте, как использовать Spring Cloud Bus для изменения конфигурации вещания и автоматизации обновления клиентов.

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

Весенний облачный автобус

1. Обзор

В этой статье мы посмотрим на новый проект Spring Cloud Bus. Spring Cloud Bus использует легкого брокера сообщений для связи распределенных узлов системы. Основное использование заключается в трансляции изменений конфигурации или другой управленческой информации. Мы можем думать об этом как распределенный актуатор .

Проект использует брокера АМЗП в качестве транспорта, но Apache Kafka или Redis могут быть использованы вместо RabbitM. Другие транспортные перевозки пока не поддерживаются.

В течение этого учебника, мы собираемся использовать RabbitM’ в качестве нашего основного транспорта – который мы, естественно, работает уже.

2. Предпосылки

Прежде чем мы начнем, рекомендуется уже завершили ” Быстрый Введение в весеннюю конфигурацию облака “. Мы собираемся взять существующий облачный сервер конфигурации и клиента, чтобы расширить их и добавить автоматические уведомления об изменениях конфигурации.

2.1. КроликМЗ

Начнем с RabbitM, который мы рекомендуем работать как Кроликм как докеру изображение . Это довольно просто установить – для того чтобы получить RabbitM’ бежать местно, нам нужно установить Docker и выполнять следующие команды после успешной установки Docker:

docker pull rabbitmq:3-management

Эта команда вытягивает изображение докера RabbitM’ вместе с установленным и включенным по умолчанию плагином управления.

Далее, мы можем запустить RabbitM:

docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management

Как только мы выполнили команду, мы можем перейти в веб-браузер и открыть http://localhost:15672 , который покажет форму входа консоли управления. Имя пользователя по умолчанию: “Гость” ; пароль: “Гость” . КроликМЗ также будет слушать на порт 5672.

3. Добавление привода в облачный клиент Config

Мы должны иметь облако config сервера и облако config клиента как работает. Для обновления конфигурации каждый раз требуется перезагрузка клиента, что не идеально.

Давайте прекратим мешать клиенту и аннотировать КонфигКлиент класс контроллера с @RefreshScope :

@SpringBootApplication
@RestController
@RefreshScope
public class SpringCloudConfigClientApplication {
    // Code here...
}

Наконец, давайте обновим пом.xml файл и добавить актуатор:


    org.springframework.boot
    spring-boot-actuator
    2.2.6.RELEASE

Последнюю версию можно найти здесь .

По умолчанию все чувствительные конечные точки, добавленные приводом, защищены. Это включает в ‘/обновить’ конечная точка. Для простоты мы отключим безопасность, обновив bootstrap.properts :

management.security.enabled=false

Кроме того, начиная с весенней загрузки 2, конечные точки привода не подвергаются воздействию по умолчанию . Чтобы сделать их доступными для доступа, мы должны добавить это в application.yml :

management:
  endpoints:
    web:
      exposure:
        include: "*"

Давайте сначала начнем работу с клиентом и обновим роль пользователя с существующих ‘Разработчик’ ‘Программист’ в файле свойств на GitHub. Сервер Config сразу же покажет обновленные значения; однако, клиент не будет. Чтобы клиент увидел новые файлы, нам просто нужно отправить пустой запрос POST ‘/обновить’ конечная точка, которая была добавлена приводом:

$> curl -X POST http://localhost:8080/actuator/refresh

Мы вернем файл JSON с обновленными свойствами:

[
  "user.role"
]

Наконец, мы можем проверить, была ли обновлена роль пользователя:

$> curl http://localhost:8080/whoami/Mr_Pink
Hello Mr_Pink! You are a(n) Programmer and your password is 'd3v3L'.

Роль пользователя была успешно обновлена и, позвонив ‘/обновить’ конечная точка. Клиент обновил конфигурацию без перезагрузки.

4. Весенний облачный автобус

Используя Actuator, мы можем обновить клиентов. Тем не менее, в облачной среде, мы должны пойти к каждому клиенту и перезагрузить конфигурацию, доступ к конечной точке привода.

Для решения этой проблемы мы можем использовать весенний облачный автобус.

4.1. Клиент

Нам нужно обновить облако config клиента, так что он может подписаться на обмен RabbitM’:


    org.springframework.cloud
    spring-cloud-starter-bus-amqp
    2.2.1.RELEASE

Последнюю версию можно найти здесь .

Для завершения изменений в клиентах нам необходимо добавить сведения о RabbitM и включить облачный автобус в application.yml файл:

---
spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
  cloud:
    bus:
      enabled: true
      refresh:
        enabled: true

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

Теперь у клиента будет еще одна конечная точка ‘/автобус-обновление’ . Вызов этой конечной точки вызовет:

  • получить последнюю конфигурацию с сервера конфигурации и обновить его конфигурацию, аннотированную @RefreshScope
  • отправить сообщение на биржу АМЗП, информирующее о событии обновления
  • все узлы, подписавшиеся на подписку, также обновят свою конфигурацию

Таким образом, нам не нужно идти в отдельные узлы и вызывать обновление конфигурации.

4.2. Сервер

Наконец, давайте добавим две зависимости к серверу конфигурации, чтобы полностью автоматизировать изменения конфигурации.


    org.springframework.cloud
    spring-cloud-config-monitor
    2.2.2.RELEASE

Последнюю версию можно найти здесь .


    org.springframework.cloud
    spring-cloud-starter-stream-rabbit
    3.0.4.RELEASE

Самая последняя версия может быть найдена здесь .

Мы будем использовать весна-облако-конфиг-монитор для мониторинга изменений конфигурации и трансляции событий с использованием RabbitM’ в качестве транспорта.

Нам просто нужно обновить application.properts и дать КроликМЗ подробную информацию:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

4.3. GitHub Webhook

Теперь все готово. Как только сервер получает уведомление об изменении конфигурации, он будет транслировать это как сообщение RabbitM. Клиент будет слушать сообщения и обновлять свою конфигурацию при передаче события изменения конфигурации. Однако, как сервер будет теперь о модификации?

Нам нужно настроить GitHub Webhook. Давайте перейдите на GitHub и откроем наш репозиторий, держащий свойства конфигурации. Теперь давайте выберем Настройки и Вебхук . Давайте нажимаем на Добавить webhook пуговица.

URL полезной нагрузки является URL для нашего сервера ‘/монитор’ конечная точка. В нашем случае URL будет что-то вроде этого:

http://root: (электронная почта защищена) _IP:8888/monitor

Нам просто нужно изменить Тип содержимого в выпадают меню для приложение/json. Далее, пожалуйста, оставьте Секретный пустой и нажмите на Добавить webhook кнопка – после этого, мы все готово.

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

Давайте убедитесь, что все приложения работают. Если мы вернемся и проверим клиента, это покажет user.role как ‘Программист’ и user.password как ‘ d3v3L ‘:

$> curl http://localhost:8080/whoami/Mr_Pink
Hello Mr_Pink! You are a(n) Programmer and your password is 'd3v3L'.

Раньше мы должны были использовать ‘/обновить’ конечная точка для перезагрузки изменений конфигурации. Давайте откроем файл свойств, изменим user.role вернуться к Разработчик и нажмите изменения:

user.role=Programmer

Если мы проверим клиента сейчас, мы увидим:

$> curl http://localhost:8080/whoami/Mr_Pink
Hello Mr_Pink! You are a(n) Developer and your password is 'd3v3L'.

Клиент Config обновил свою конфигурацию без перезагрузки и без явного обновления почти одновременно. Мы можем вернуться к GitHub и открыть недавно созданный Webhook. В самом низу, Есть последние поставки. Мы можем выбрать один в верхней части списка (если это было первое изменение – там будет только один в любом случае) и изучить JSON, который был отправлен на сервер config.

Мы также можем проверить журналы config и сервера, и мы увидим записи:

o.s.cloud.bus.event.RefreshListener: Received remote refresh request. Keys refreshed []

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

В этой статье мы взяли существующий сервер и клиент весеннего облака и добавили конечную точку привода для обновления конфигурации клиента. Далее мы использовали Spring Cloud Bus для трансляции изменений конфигурации и автоматизации обновления клиентов. Мы также настроили GitHub Webhook и протестировали всю настройку.

Как всегда, код, используемый во время обсуждения, можно найти более на GitHub .