Spring Cloud - это инструмент разработки облачных приложений на основе Spring Boot. Он предоставляет простой метод разработки для управления конфигурацией, обнаружения услуг, автоматических выключателей, интеллектуальной маршрутизации, микроагентов, автобусов, глобальных замков, кампаний принятия решений, распределенных сеансов и управления государством кластера, участвующих в разработке облачного приложения на основе JVM. Переупаковка и экранирование сложных конфигураций и принципов реализации с помощью стиля Spring Boot, в конечном итоге, оставляя разработчиков простым, простым для понимания, простым в развертывании и простых в поддержании инструментария разработки распределенной системы.
Spring Cloud включает в себя несколько подпроектов (для нескольких различных продуктов с открытым исходным кодом, участвующих в распределенных системах), таких как конфигурация Spring Cloud, Spring Cloud Netflix, Spring CloudFoundry, Spring Cloud AWS, Spring Cloud Security, Spring Cloud Commons, Spring Cloud Zookeeper, Cli Spring Cloud и другие проекты.
Адрес проекта: https://github.com/yuezhongxin/spring-cloud-consul-sample
Реализация ASP.NET CORE 2.0 & Docker & Consul: https://github.com/yuezhongxin/hellodocker.sample
Текущий тестовый сайт использует ядро ASP.NET для объединения Conusl и Fabio для создания кластера микросервиса. Поскольку связь между каждой службой основана на протоколе HTTP REST, реализация услуг может быть межязычным. Давайте разработаем сервис Spring Boot, а затем используем Spring Cloud Consul, чтобы зарегистрировать службу в существующем кластере.
Инструмент разработки Java, который я выбрал Intellij Idea (MacOS Unstator Rutorial), который в настоящее время используется очень хорошо (цветовая схема использует Darcula системы, размер шрифта 14), а Java SDK нуждается в дополнительной загрузке и установке (версия 10, которую я установил).
Поскольку я впервые использовал идею Intellij, я опубликую процесс создания проекта подробно ниже.
Во -первых, создайте проект (выберите «Spring initializr», Spring Boot Project) и выберите Java SDK 10 по умолчанию:
Затем заполните основную информацию проекта (артефакт-это «Spring-Cloud-Consul-Sample», другие-по умолчанию):
Примечание: Maven - это инструмент управления и строительства проекта, который содержит три ключевых компонента: модель объекта проекта (POM), модель управления зависимостями, жизненный цикл сборки и этап.
Разница между идентификатором группы и идентификатором артефакта. Если идентификатор группы рассматривается как компания, идентификатор артефакта может рассматриваться как отдел компании, который несколько похож на отношения между решениями и библиотеками классов в .NET. Например, идентификатор группы весеннего облачного проекта-это org.springframework.cloud , а идентификатор артефакта весеннего облачного консула spring-cloud-starter-consul-discovery .
Ниже приводится тип проекта Create Spring Boot (выберите веб -зависимости):
Затем заполните название проекта и каталог проекта:
Затем нажмите «Закончить», и это сделано.
Подобно разработке основного приложения ASP.NET, нам нужно сначала ссылаться на различные пакеты, и то же самое относится и к проектам Spring Boot. Поскольку мы используем Maven для управления зависимостями, нам необходимо настроить зависимости в pom.xml и настроить их следующим образом:
<parent> <groupid> org.springframework.boot </GroupId> <ArtifactId> Spring-boot-Starter-parent </artifactid> <sersive> 2.0.0.release </version> <venuvityPath/> <!-Lookup Parent от Repository-> </parent> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputencoding> utf-8 </project.Report.OutputEncoding> <java.version> 1.8 </java.version> </properties> <зависимости> <зависимости>. <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <dependency> <groupId> org.springframework.boot </GroupId> <ArtifactId> Spring-Boot-Starter-Actuator </artifactid> <crappe> compile </scope> </degifect> <dependency> <groupid> org.springframework.boot </Groupid> <ratifactid> spring-boot-starter-test-test-test </artifact> </GroupD> <ratifactId> spring-boot-starter-test-test> </dependency></dependencies><dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-consul-dependencies</artifactId> <version>2.0.0.M7</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies></dependencyManagement>
Справочная spring-cloud-starter-consul-discovery соответствует консулу Spring Cloud, а эталонный консул spring-boot-starter-actuator используется в качестве проверки здоровья (адрес /actuator/health ). Кроме того, Actuator также поддерживает мониторинг проекта и управление.
Давайте поговорим о роли узлов здесь:
parent : родительская справочная конфигурация наследует родительскую справочную конфигурацию.dependencies : текущая справочная конфигурация. Если родительская ссылка настроена, дочерний проект будет автоматически ссылаться.dependencyManagement : конечно, справочная конфигурация. Если родительская ссылка настроена, дочерний проект не будет автоматически ссылаться. Дочерний проект необходимо ссылаться только при использовании, а номер версии не требуется. Затем опубликуйте код SpringCloudConsulSampleApplication.java :
пакет com.example.springcloudconsulsample; импорт org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.springapplication; импорт org.springframework.boot.autoconfigure.springbootpplication; org.springframework.web.bind.annotation.requestmapping; импорт org.springframework.web.bind.annotation.restcontroller; import org.springframework.cloud.client.discovery.enablediscoveryclient; import org.springframework.cloud.client.discovery.discoveryclient;@enablediscoveryclient@restcontroller@springbootapplicationpublic class springcloudconsulsamplepleaplication {@autowired private discoveryclient discoveryclient; /*** Получить все услуги*/@requestmapping ("/services") public Object Services () {return DiscoveryClient.getServices (); } @Requestmapping ("/home") public String home () {return "Hello World"; } public static void main (string [] args) {SpringApplication.run (SpringCloudconsulsAmpleApplication.class, args); }} Добавьте аннотацию @EnableDiscoveryClient . Когда проект запускается, текущая служба Spring Boot будет зарегистрирована.
При регистрации сервиса с использованием Core ASP.NET информация о конфигурации будет заполнена в коде (например, имя службы и порт и т. Д., И, конечно, она также может быть в файле конфигурации), а затем служба будет зарегистрирована с использованием компонента консула (называемый http http).
Если вы зарегистрируете службу в Spring Cloud Consul, вам необходимо добавить файл конфигурации (файл ресурса Spring Boot Project находится в каталоге ресурсов).
Добавить конфигурацию в application.properties :
Spring.application.name = Spring-Boot-Service
Затем добавьте файл конфигурации application.yml :
Затем добавьте файл конфигурации Application.yml: Debug: TrueServer: Port: 24543Spring: Cloud: Consult: Host: 127.0.0.1 Порт: 8500 Discovery: Регистр: True HostName: 10.9.10.215 ServicEname: $ {Spring.Application.name} HealthCheckpath: /Actiator /HealthCeckEnter: 15S -atame}} healthCheckpath: /Actuator /Actiator /HealthceckEnter: 15sAms. urlprefix-/$ {spring.application.name} exactionid: $ {spring.application.name}: $ {vcap.application.instance_id: $ {spring.application.instance_id: $ {random.value}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}Приведенная выше конфигурация должна быть подробно объяснена:
debug - это режим отладки, и если они упакованы и опубликованы, его необходимо установить на false .server.port настраивает порт Spring Boot Service.spring.cloud.consul.host/port настраивает адрес и порт локального консула (можно использовать как узел сервера, так и узел клиента). Spring Cloud Consul вызовет консул HTTP -интерфейс REST, чтобы зарегистрировать службу.spring.cloud.consul.discovery.true настраивает, следует ли регистрировать службу при запуске,spring.cloud.consul.discovery.hostname Настраивает адрес хоста сервиса Spring Boot, или его можно настроить без конфигурации, а локальный адрес по умолчанию.spring.cloud.consul.discovery.serviceName настраивает имя службы зарегистрированного консула. Переменная ${spring.application.name} - это конфигурация, которую мы добавили в файл конфигурации application.properties .spring.cloud.consul.discovery.healthCheckPath Настраивает адрес проверки здоровья консула. Компонент привода помогает нам реализовать его, поэтому нам не нужна дополнительная реализация. Адрес можно увидеть в информации о печати при запуске службы.spring.cloud.consul.discovery.healthCheckInterval настраивает частоту проверки здоровья консула, то есть частота сердцебиения.spring.cloud.consul.discovery.tags настраивает теги Службы регистрации консула, установленную в формате urlprefix-/serviceName и автоматически зарегистрирован в кластере Фабио.spring.cloud.consul.discovery.instanceId настраивает идентификатор службы регистрации консула.После завершения вышеуказанной работы нам также необходимо начать консул и Фабио на местном уровне
Затем мы можем напрямую отладить проект, используя Intellij Idea и Press Shift + F9 для отладки.
Вышеупомянутое информация о печати привода:
2018-03-28 10: 09: 54.645 Информация 63482 --- [Main] sbaewswebmvcendpointhandLermapping: mappen "{[/actuator/healthтки, Methods=nget^, produces=mapplication/vnd.spring-boot.actuator.v2+Json || java.lang.object org.springframework.boot.actuate.endpoint.web.servlet.abstractwebmvcendpointhandLermapping $ anpormationHandler.handle (javax.servlet.http.httpservletrequest, java.Util.map <java.lang.string, java.
2018-03-28 10: 09: 54.646 Информация 63482 --- [Main] sbaewswebmvcendpointhandLermapping: mapped "{[/actuator/info®,,methods=tles java.lang.object org.springframework.boot.actuate.endpoint.web.servlet.abstractwebmvcendpointhandLermapping $ anpormationHandler.handle (javax.servlet.http.httpservletrequest, java.Util.map <java.lang.string, java.
2018-03-28 10: 09: 54.647 Информация 63482 --- [main] sbaewswebmvcendpointhandLermapping: mapped "{[/Actuatorí,,,methods=Tnthandlermapp java.util.map <java.lang.string, java.util.map <java.lang.string, org.springframework.boot.actuate.endpoint.web.link >> org.springframework.boot.actuate.endpoint.web.servlet.webmvcendpointhandLermapping.links (javax.servlet.http.httpservletrequest, javax.servlet.http.httpservesponse)
Или мы можем использовать Maven для упаковки релиза и запустить службу с команды. Вы можете использовать Maven In Intellij Idea, чтобы упаковать его или использовать команду Maven, чтобы упаковать ее. Здесь мы используем команду Maven, чтобы упаковать ее.
Когда мы установили INTELLIJ IDEA, Maven был автоматически установлен, но непосредственно нажав mvn -v обнаружит, что команда не может быть найдена, поэтому нам нужно настроить переменные среды.
Мой собственный каталог файлов Maven IS /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3 , который можно найти в настройках конфигурации Idea, а затем мы выполняем следующую команду:
$ export m2_home = "/applications/intellij idea.app/contents/plugins/maven/lib/maven3" && export path = $ path: $ m2_home/bin && chmod a+x "/applications/intellij idea.app/contents/plugins/maven/lib/maven3/bin/mvn"
Затем проверьте, действует ли команда Maven:
$ mvn -vapache maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11t00: 41: 47+08: 00) Maven Home:/Applications/Intellij Idea.App/contents/plugins/maven/maven/maven/maven3 Продавец: Oracle CorporationJava Home: /library/java/javirtualmachines/jdk-10.jdk/contents/homedefault locale: zh_cn_#hans, платформа кодирования: utf-8os name: "mac x", версия: "10.13.2", Arch: "x86_64", "Mac Os", версия: "10.13.2", Arch: "x86_64:" Mac Os "," 10.13.2 ", Arch:" x86_64: "Mac Os", "10.13.2", Arch: "x86_64:" Mac Os "," 10.13.2 ", Arch:" x86_64: "Mac Os", "10.13
Затем мы изменяем debug:false in application.yml и используем Maven для его упаковки (переключить каталог на уровень pom.xml ):
$ mvn Clean Package -dmaven.test.skip = true [info] Сканирование для проектов ... [Информация] [Информация] --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Spring-Cloud-Consul-Sample --- [info] Deleting/Users/xishuai/Documents/Project Files/Test Project/Spring-Cloud-Consul-Sample/Target [Info] [Info] --- Maven-Resources-Plugin: 3.0.1: Ресурсы (по умолчанию-ресурсам) @ Spring-Cloud-Sample-Sample --- Использование ресурсов utf-8 'для копирования. Копирование 0 ресурс [Info] [Info] --- Maven-Compiler-Plugin: 3.7.0: Compile (по умолчанию-компиляции) @ Spring-Cloud-Consul-Sample --- [Информация] Обнаруженные изменения-перекомпиляция модуля! [Информация] Компиляция 1-исходного файла/usishuai/documper/documts/test/test/spring-cloud-cons-cons-sample/target/inform/info [info] info [info] info [info] info]- Maven-Resources-Plugin: 3.0.1: TestResources (по умолчанию stestresources) @ Spring-Cloud-Consul-Sample --- [Info] Не копирование ресурсов тестирования [Info] [Info] --- Maven-Compiler-Plugin: 3.7.0: Testcompile (default-testcompile) @ Spring-Consul-Consul-Sample-[info). Maven-Surefire-Plugin: 2.20.1: тест (по умолчанию) @ Spring-Cloud-Consul-Sample --- [Информация] Тесты пропущены. Проекты/Spring-Cloud-Consul-Sample/Target/Spring-Cloud-Consul-Sample-0.0.1-Snapshot.jar [info] [Info] --- Spring-Boot-Maven-Plugin: 2.0.0.Release: Repackage (по умолчанию) @ Spring-Cloud-Consul-Sample --- [Info] --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------. ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Сгенерированный пакет JAR будет находиться в целевом каталоге, а файл spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar (формат-项目名+ 版本号), а затем мы можем начать службу напрямую:
$ java -jar target/spring-cloud-consul-sample-0.0.1-snapshot.jar2018-03-28 10: 33: 31.750 Информация 63875 --- [main] [Ср 28 марта 10:33:31 CST 2018]; Корень контекста иерархийный вещание: Произошла незаконная операция по рефлексивному доступу. Project/Spring-Cloud-Consul-Sample/Target/Spring-Cloud-Consul-Sample-0.0.1-snapshot.jar! /Boot-inf/lib/spring-core-5.0.4.release.jar!/) К методу java.lang.classloader.defineclass (java.lang.string, byte [], int, int, java.security.protectiondomain). Предупреждение: пожалуйста, рассмотрите возможность сообщить об этом для сопровождающих org.springframework.cglib.core.Reflectuts $ 1warning: использование-warg.cesscess.core.core.Reflectuts $ 1warning: использование-warbess at of warnable. OperationsWarning: Все операции незаконного доступа будут отказаны в будущем выпуске2018-03-28 10: 33: 31.971 Информация 63875 --- [Main] FaautowiredantationBeanpostProcessor: JSR-330 'Javax.inject.inject' Annotation, найденный и поддерживается для автоматического размещения2018-03-28 10: 33.015: 33.015: 33.015: 32.015: 32.015: 32.015: 32.015: 32.015: 32.015: 32.015: 32.015: 32.015: 32. --- [Main] trationDelegate $ beanpostprocessorchessececker: bean 'ConfigurationPertiesRebinderautoconfiguration' типа [org.springframework.cloud.autoconfigure.configurationPropertiesRebinderautoConfiguration $ $ enformerbyspringcglibglibryperteSrebinderautoconfiguration $ $ Все Beanpostprocessors (например: не имеют права на автопроксимирование). ____ __ _ /// ___'_ __ _ _ (_) _ __ __ _ / / / // (() / ___ | '_ |' _ | / // // // ___) | | _) | | | | | | || (_ | |)))) '| ____ | .__ | _ | | _ | _ | | _/__, | //// ==========================================================================
Проверьте, успешна ли проверка здоровья:
Проверьте, успешна ли регистрация службы консула:
Проверьте, содержит ли кластер Fabio службы:
После того, как регистрация услуг будет успешной, мы можем вручную обнаружить сервис или обнаружить его через компонент Spring Cloud ленты/притворство, а также предоставить функции балансировки нагрузки (аналогично функции Fabio), а затем изучить его позже.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.