Обзор
Предположим, сейчас есть требование:
Наше приложение развернуто на 10 машинах. Когда мы настраиваем определенный параметр конфигурации, нам не нужно перезагрузить машину. 10 Машины могут автоматически получить последнюю конфигурацию.
Как это достичь? Есть много видов, таких как:
1. Поместите конфигурацию в базу данных, и каждый раз, когда приложение читает конфигурацию непосредственно из БД. Таким образом, нам нужно только изменить БД и обновить последнюю информацию о конфигурации в базе данных. Таким образом, независимо от того, сколько приложений, поскольку все они получают информацию о конфигурации из одного и того же БД, они могут, естественно, получить последнюю конфигурацию.
2. Каждая машина предоставляет интерфейс UpdateConfig, который обновляет информацию о конфигурации. Когда необходимо изменить конфигурацию, интерфейс UpdateConfig на сервере называется один за другим.
3. Используйте Redis, чтобы реализовать его и разместить информацию о конфигурации на Redis, но таким образом вы должны читать его каждый раз, что имеет больше сетевых запросов.
Вышеупомянутые три метода легче всего подумать, и их легко сделать, но, конечно, есть много недостатков. Хотя есть много недостатков, некоторые традиционные компании делают это.
В интернет -компаниях я в основном никогда не видел, чтобы кто -то играл так, все они используют распределенные конфигурационные центры. Используйте открытый исходный код или реализуйте его самостоятельно. В настоящее время существует много распределенных центров конфигурации с открытым исходным кодом, и Spring Cloud Config является лучшей среди них. Далее мы будем использовать Spring Cloud Config для реализации распределенного центра конфигурации.
Использовать ли последнюю версию Spring Boot 2.0
Раньше я использовал новейшую Spring Cloud 2.0, чтобы сделать распределенную демонстрацию, которая является центром конфигурации. Я думал, что это было просто, но потребовался целый день, чтобы сделать это. Есть несколько причин:
1. Соответствующий документ Spring Cloud не был полностью обновлен, и есть проблема и не может быть найден в документе;
2. В настоящее время мало компаний, использующих версию 2.0, и в Интернете нет конкретных практических статей. После того, как проблема сломалась, Байду не смог найти решение. Google в основном трудно найти решения, все из которых являются спорадическими фрагментами знаний;
3. В версии 2.0 в версии 2.0 существуют некоторые незначительные изменения, и если это все еще сделано в соответствии с версией 1.5.x, она не будет работать.
Основываясь на приведенных выше причинах, рекомендуется использовать версию 1.5.x, чтобы быть более надежной. Следующая статья будет представлена в следующей версии:
весенний ботинок:
1.5.2.
Соответствующее облако пружины использует:
Dalston.release
Создать Spring Cloud Config Server
Если вы просто хотите управлять конфигурацией равномерно с помощью Spring Cloud Config и не хотите быть в центре конфигурации в настоящее время, вам нужны только компоненты конфигурации и шины. Однако, если вы хотите обеспечить высокую доступность, вы также должны использовать компонент регистрации обнаружения Spring Cloud.
В дополнение к конфигурации и шине нам также необходимо использовать GIT. Потому что Spring Cloud Config использует GIT для управления версиями.
Очень просто сделать центр конфигурации на основе конфигурации Spring Cloud, это делается всего за несколько небольших шагов.
【1】 Внедрить компоненты конфигурации и шины
<depervice> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-config-server </artifactid> </dependency> <depervice> <groupid> org.springframework.cloud </GroupD> <strifactid> spring-cloud-starter-bus-amqp </artifactid> <pretfactid> spring-cloud-bus-bus-amqp </artifactid> <precifactid> spring-cloud-bus-bus-amq
【2】 Класс запуска использует аннотацию @enableconfigserver
Package Spring.cloud.config; Import org.springframework.boot.springapplication; импорт org.springframework.boot.autoconfigure.springbootapplication; импорт org.springframework.cloud.config.server.enableconfigserver;@ounbleconfigriction@sprnepplicplicpplictrication@waspplimpplic. ConfigApplication {public static void main (string [] args) {springApplication.run (configApplication.class, args); }}【3】 Application.yml -файл настраивает репозитории RabbitMQ и GIT
Сервер: порт: 8040spring: Приложение: Имя: Spring-Cloud-Config-Server Cloud: Config: Server: GIT: URI: https://gitlab.xxxxx.com/config/xxxxx.git search-paths: username: xxxxx password: xxxxxxx.gist: 127.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0. Пароль: Guest Management: Security: включено: false
RabbitMQ настроен, потому что компонент шины должен использовать его для уведомления клиента, и внесены изменения конфигурации. Также не забудьте использовать
Управление: Безопасность: включено: false
Проверка будет закрыта, и следующая операция всегда будет сообщать об ошибке авторизации.
Центр конфигурации сервера был завершен. Теперь вы можете провести небольшой эксперимент на сервере и отправить файл demo-dev.properties. Содержание файла следующим образом:
Адрес = привет
Затем используйте
http: // localhost: 8040/demo/dev
Если вывод
{"Адрес": "Привет"}Это означает, что взаимодействие между конфигурацией Spring Cloud и GIT в порядке.
Центр конфигурации доступа клиента
Наши цели:
После того, как информация о конфигурации будет изменена и отправлена в GIT, все клиенты, подключенные к Cloud Config Spring, немедленно получат уведомления и получат последнюю информацию о конфигурации.
Следующее описывает, как достичь этой цели.
Клиенту нужно сделать только несколько небольших шагов для завершения действия доступа.
【1】 Внедрить зависимости
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId> org.springframework.cloud </GroupId> <ArtifactId> Spring-Cloud-Starter-config </artifactid> </vehyederiation> <dependency> <groupid> org.springframework.cloud </Groupid> <Artifactid> Spring-Starter-bus-amqp </artifactid> </artifactid> spring-starter-bus-amqp </artifactid> </artifactid> spring-starter-bus-amq
Внедрение Spring-Boot-Starter-Web предназначено только для экспериментов.
【2】 Настройте RabbitMQ и введите URL -адреса в центре конфигурации
Application.properties
spring.application.name = Spring-Cloud-Config-client1server.port = 8042management.security.Enabled = falsespring.rabbitmq.host = 127.0.0.1spring.rabbitmq.port = 5672spring.rabbitmq.username = гости
Bootstrap.properties
spring.cloud.config.name = demospring.cloud.config.profile = devspring.cloud.config.label = masterspring.cloud.config.uri = http: // localhost: 8040/
Есть три балла, на которые обратите внимание на:
1. Закрыть проверку: Management.security.enabled = false
2. Конфигурация, связанная с конфигурацией Spring Cloud, должна быть размещена в Bootstrap.properties
3. Используйте Spring.cloud.config.uri, чтобы указать адрес центра конфигурации
Кроме того, для клиента классу запуска не нужно добавлять никаких аннотаций, связанных с конфигурацией и шиной .
После того, как мы добрались до этого клиента, мы можем использовать контроллер, чтобы начать экспериментировать.
Пакет SpringCloudConfig.Client; импорт org.springframework.beans.factory.annotation.value; import org.springframework.cloud.context.config.annotation.refreshscope; импорт org.springframework.web.bindtation.requestmaping; org.springframework.web.bind.annotation.restcontroller;@restcontroller@refreshscopepubbublic class hellocontroller {@value ("$ {Adder}") частный строковый адрес; @Requestmapping ("/address") public String getAddress () {return this.address; }}Предполагая, что приведенный выше HelloController должен использовать конфигурацию адреса, вам нужно только использовать аннотации @RefreshScope и @Value.
@Refreshscopepubublic class hellocontroller {} @Value ("$ {Adder}") частный строковый адрес;Чтобы проверить, может ли клиент получить последнюю информацию о конфигурации, предоставьте
@Requestmapping ("/address") public String getAddress () {return this.address; }метод
Давайте изменим файл demo-dev.properties и изменим значение на
Адрес = Hello Update
И отправьте его в git. В настоящее время мы называем интерфейс GetAddress
http: // localhost: 8041/адрес
Я обнаружил, что не получил последнюю ценность. Это связано с тем, что после того, как действие поталкивания в GIT было завершено, мы не уведомили Spring Cloud Bus. Вы можете использовать почтальон, чтобы сделать запрос на сообщение и позвонить в следующий интерфейс, чтобы уведомлять шину.
http: // localhost: 8040/автобус/обновление
Как только этот интерфейс будет успешно назван, шина будет использовать RabbitMQ, чтобы уведомить всех клиентов о том, что конфигурация была обновлена.
Особое внимание:
Мы называем интерфейс /шин /обновление сервера, а не интерфейс /шин /обновление клиента.
Если вам приходится вызывать интерфейс /шин /обновление на сервере каждый раз, когда вы отправляете, то это слишком хлопотно. Вы можете использовать WebHook, чтобы помочь.
Если вы используете новый Gitlab, вам просто нужно нажать [Настройки] в проекте, затем нажмите [Интеграции], чтобы настроить веб -крюк, как показано на рисунке ниже:
Заполните URL -адрес на адрес интерфейса /шины /обновления сервера Configuration Center, а затем нажмите [Добавить webhook].
Сравнение с Apollo Ctrip
Изысканная вещь о конфигурации Spring Cloud заключается в том, что ее конфигурация хранится в GIT, которая естественным образом изолирует модификацию конфигурации, разрешения, версии и другие проблемы. Этот дизайн делает Spring Cloud Config очень простым в целом, но также доставляет некоторые неудобства.
Давайте попробуем сделать простое резюме:
| Функциональные точки | Аполлон | Пружинный облачный конфигурация | Примечание |
|---|---|---|---|
| Интерфейс конфигурации | Один интерфейс управляет разными средами и различными конфигурациями кластера | Нет, нужно работать через git | |
| Настройка эффективного времени | в реальном времени | Перезапуск вступает в силу, или ручное обновление вступает в силу | Press Cloud Config необходимо передать GIT Webhook, а также дополнительную очередь сообщений для поддержки эффекта в реальном времени |
| Управление версией | История выпуска и кнопки отката предоставляются непосредственно на интерфейсе | Нет, нужно работать через git | |
| Выпуск серого | поддерживать | Не поддерживается | |
| Авторизация, аудит, аудит | Непосредственно поддерживается на интерфейсе и поддерживает разделение модификации и публикации разрешений | Должен быть установлен через репозиторий GIT и не поддерживает модификацию и разделение разрешений | |
| Мониторинг конфигурации экземпляра | Легко увидеть, какие клиенты в настоящее время используют какие конфигурации | Не поддерживается | |
| Конфигурация для получения производительности | Быстрый, доступ через базу данных и поддержка кэширования | Медленнее, необходимо читать из репозитория клона git, а затем из файловой системы | |
| Поддержка клиента | Назнакомительно поддерживайте все приложения Java и .net, предоставьте API для поддержки других языковых приложений, а также поддерживает пружинные аннотации для получения конфигурации | Поддержка Spring Applications и предоставление аннотации для получения конфигурации | Аполлон имеет более широкий спектр приложений |
Я лично рекомендую использовать конфигурацию Spring Cloud, которая очень легкая и активна в сообществе. Легко найти решение при столкновении с проблемами. Кроме того, я лично думаю, что разница между Apollo и Spring Cloud Config только что нет интерфейса. Интерфейс может быть сделан, и мы можем сделать это через git, но пользовательский опыт не так хорош.
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.