Spring Cloud es una herramienta de desarrollo de aplicaciones en la nube basada en Spring Boot. Proporciona un método de desarrollo simple para la gestión de la configuración, el descubrimiento de servicios, los interruptores de circuitos, el enrutamiento inteligente, los microgentes, el bus de control, las cerraduras globales, las campañas de toma de decisiones, las sesiones distribuidas y la gestión del estado de clúster involucrados en el desarrollo de la aplicación en la nube basada en JVM. Reempaquetado y protegido de configuraciones complejas y principios de implementación a través del estilo de arranque de primavera, en última instancia, dejando a los desarrolladores con un kit de herramientas de desarrollo de sistemas simple, fácil de entender, fácil de entender y fácil de mantener.
Spring Cloud incluye múltiples subprojects (para múltiples productos de código abierto diferentes involucrados en sistemas distribuidos), como Spring Cloud Config, Spring Cloud Netflix, Spring Cloud CloudFoundry, Spring Cloud AWS, Spring Cloud Security, Spring Cloud Commons, Spring Cloud Zookeeper, Spring Cloud CLI y otros proyectos.
Dirección del proyecto: https://github.com/yuezhongxin/springcloud-consul-sample
Implementación de ASP.NET Core 2.0 y Docker & Cónsul: https://github.com/yuezhongxin/hellodocker.sample
El sitio de prueba actual utiliza el núcleo ASP.NET para combinar Conusl y Fabio para construir un clúster de microservicio. Debido a que la comunicación entre cada servicio se basa en el Protocolo REST HTTP, la implementación del servicio puede ser cruzada. Desarrolle un servicio de arranque de primavera y luego usemos Spring Cloud Cave para registrar el servicio al clúster existente.
La herramienta de desarrollo de Java que elegí IntelliJ Idea (Tutorial de instalación de MacOS), que actualmente se usa muy bien (Color Scheme usa la Darcula del sistema, Fuente Size 14) y el Java SDK necesita descarga e instalación adicionales (la versión 10 que instalé).
Debido a que utilicé la idea IntelliJ por primera vez, publicaré el proceso de crear un proyecto en detalle a continuación.
Primero, cree un proyecto (seleccione "Spring Initializr", Project Spring Boot) y seleccione Java SDK 10 de forma predeterminada:
Luego complete la información básica del proyecto (el artefacto es "Spring-Cloud-Consul-Sample", otros son el valor predeterminado):
Nota: Maven es una herramienta de gestión y construcción de proyectos que contiene tres componentes clave: el modelo de objeto del proyecto (POM), el modelo de gestión de dependencia, el ciclo de vida de compilación y la etapa.
La diferencia entre ID de grupo y ID de artefacto. Si la identificación del grupo se considera una empresa, el ID de artefactos puede considerarse como un departamento de empresa, que es algo similar a la relación entre soluciones y bibliotecas de clase en .NET. Por ejemplo, la ID de grupo de un proyecto de Spring Cloud es org.springframework.cloud , y la ID de artefactos de Spring Cloud Consul es spring-cloud-starter-consul-discovery .
El siguiente es el tipo de proyecto Crear Boot Spring (seleccione las dependencias web):
Luego complete el nombre del proyecto y el directorio del proyecto:
Luego haga clic en "Finalizar" y está listo.
Al igual que desarrollar una aplicación ASP.NET Core, primero debemos hacer referencia a varios paquetes, y lo mismo es cierto para los proyectos de arranque de primavera. Debido a que usamos Maven para la gestión de dependencias, necesitamos configurar las dependencias en pom.xml y configurarlas de la siguiente manera:
<Parent> <MoupRoMID> org.springframework.boot </groupid> <artifactid> spring-boot-starter-parent </arfactid> <version> 2.0.0.release </lipsion> <relativePath/> <!-Buscar padres de repositorio-> </prepers> <propiences> <Project.Build.SourceEncoding> UTF-8 </project.build.SourceEncoding> <Project.Reporting.outputEncoding> Utf-8 </project.Reporting.outputEncoding> <Java.version> 1.8 </Java.Version> </propiences> <pendences> <Spendences> <MoupRoD> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </pepertency> <peperse> <mupoupid> org.springframework.cloud </proupid> <arifactid> springcloud-shossul-ul-discovery </artifactid> </shifependency> <MoupRoD> org.springframework.boot </groupid> <artifactid> spring-boot-starter-actuator </artifactid> <cope> compilar </lopope> </pendency> <ependency> <proupID> org.springwork.boot </groupID> <AtifactID> tope--tarr-test </artfope> </scope> </sCOPE> </COPE> </sCOPE> </COPE> </ACCOPE> </pendency> </dependencias> <pendencymanagement> <pendencies> <pendency> <MoupRoMID> org.springframework.cloud </groupid> <artifactid> spring-ncloud-consul-dependencies </artifactid> <versión> 2.0.0.m7 </versión> <pom> pom </type> <cope> importación> </cope> </cope> </</dependence </</dependence </dependence </dependence
El spring-cloud-starter-consul-discovery corresponde a Spring Cloud Cónsul, y el spring-boot-starter-actuator se utiliza como una verificación de salud (dirección /actuator/health ). Además, Actuator también admite el monitoreo y la gestión de proyectos.
Hablemos del papel de los nodos aquí:
parent : La configuración de referencia principal heredará la configuración de referencia principal.dependencies : la configuración de referencia actual. Si la referencia principal está configurada, el proyecto infantil se referenciará automáticamente.dependencyManagement : por supuesto, configuración de referencia. Si la referencia principal está configurada, el proyecto infantil no se hace referencia automáticamente. El proyecto infantil solo debe ser referenciado cuando se usa, y el número de versión no es necesario. Luego publique el código de SpringCloudConsulSampleApplication.java :
paquete com.example.springcloudconsaplample; import org.springframework.beans.factory.annotation.aUtowired; import org.springframework.boot.springapplication; import org.springframework.boot.auToconfigure.springbootapplication; importación; importación; org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.restcontroller; import org.springframework.cloud.client.discovery.enabledScoveryClient; import org.springframework.cloud.client.discovery.discoveryclient;@habilitadosiscoveryclient@restController@springbootapplicationPublic class springcloudconsuLpeSpleAplication {@aUtoWired DiscoverSyclient DiscoverChinClient; /*** Obtenga todos los servicios*/@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); }} Agregue la anotación @EnableDiscoveryClient . Cuando se inicia el proyecto, se registrará el servicio actual de arranque de primavera.
Al registrar un servicio utilizando ASP.NET Core, la información de configuración se completará en el código (como el nombre del servicio y el puerto, etc., y, por supuesto, también puede estar en el archivo de configuración), y luego el servicio se registrará utilizando el componente del consule (llamado REST CONSUL HTTP).
Si registra un servicio con Spring Cloud Consul, debe agregar un archivo de configuración (el archivo de recursos del proyecto Spring Boot está en el directorio de recursos).
Agregue la configuración en application.properties :
Spring.Application.Name = Spring-Boot-Service
Luego agregue el archivo de configuración application.yml :
Luego agregue el archivo de configuración de la aplicación urlprefix-/$ {spring.application.name} instanceid: $ {spring.application.name}: $ {vcap.application.instance_id: $ {spring.application.instance_id: $ {random.value}}}La configuración anterior debe explicarse en detalle:
debug es si se debe depurar el modo, y si está empaquetado y publicado, debe establecerse en false .server.port configura el puerto del servicio Spring Boot.spring.cloud.consul.host/port configura la dirección y el puerto del cónsul local (se pueden usar el nodo del servidor y el nodo cliente). Spring Cloud Consul llamará a la interfaz Cónsul HTTP REST para registrar el servicio.spring.cloud.consul.discovery.true configura si registrar un servicio al comenzar,spring.cloud.consul.discovery.hostname configura la dirección de host del servicio de arranque de Spring, o se puede configurar sin la configuración, y la dirección local predeterminada es.spring.cloud.consul.discovery.serviceName configura el nombre del servicio de Cónsul registrado. La variable ${spring.application.name} es la configuración que agregamos en el archivo de configuración application.properties anterior.spring.cloud.consul.discovery.healthCheckPath configura la dirección de verificación de salud del cónsul. El componente del actuador nos ayuda a implementarlo, por lo que no necesitamos una implementación adicional. La dirección se puede ver en la información de impresión cuando se inicia el servicio.spring.cloud.consul.discovery.healthCheckInterval configura la frecuencia de verificación de salud del consule, es decir, la frecuencia del corazón.spring.cloud.consul.discovery.tags configura las etiquetas del servicio de registro del consul, establecido en el formato de urlprefix-/serviceName , y se registra automáticamente en el clúster Fabio.spring.cloud.consul.discovery.instanceId Configura ID de servicio de registro de consule.Después de completar el trabajo anterior, también necesitamos comenzar a cónsul y Fabio localmente
Luego podemos depurar directamente el proyecto usando la idea IntelliJ y presionar Shift + F9 para depurar.
La información de impresión mencionada anteriormente del actuador:
2018-03-28 10: 09: 54.645 Información 63482 --- [Main] SbaewswebmvCendPointhandLermapping: Mapped "{[/actuator/Healthfont>,Methods= sorgetfont>,Produces=anceApplication/Vnd.Spring-Boot.actuator.v2+JSON || Aplicación/json] java.lang.object org.springframework.boot.actuate.endpoint.web.servlet.abstractWebmvCendPointhandLermapping $ operationHandler.Handle (javax.servlet.http.htttpservletreRequest, java.util.map <java.lang.string, java.lang.lang.lang.lang.langing>)
2018-03-28 10: 09: 54.646 Información 63482 --- [Main] sbaewswebmvcendpointhandlermapping: mapeado "{[/actuator/infofofont>,methods= sorgetfont>,Produces=anceApplication/vnd.spring-boot.actuator.v2+json || java.lang.object org.springframework.boot.actuate.endpoint.web.servlet.abstractWebmvCendPointhandLermapping $ operationHandler.Handle (javax.servlet.http.htttpservletreRequest, java.util.map <java.lang.string, java.lang.lang.lang.lang.langing>)
2018-03-28 10: 09: 54.647 Información 63482 --- [Main] SbaewswebmvCendPointhandLermapping: Mapped "{[/actuatorfont>,Methods= SAYGETFontENAD 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.httpservletResponse)
O podemos usar Maven para empaquetar la versión e iniciar el servicio con el comando. Puede usar Maven en IntelliJ Idea para empaquetarlo, o usar el comando Maven para empaquetarlo. Aquí usamos el comando Maven para empaquetarlo.
Cuando instalamos la idea de IntelliJ, Maven se instaló automáticamente, pero alcanzar directamente mvn -v encontrará que el comando no se puede encontrar, por lo que necesitamos configurar las variables de entorno.
Mi propio directorio de archivos Maven es /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3 , que se puede encontrar en la configuración de configuración de IntelliJ Idea, y luego ejecutamos el siguiente comando:
$ Export m2_home = "/aplicaciones/IntelliJ Idea.app/contents/plugins/maven/lib/maven3" && export)
Luego verifique si el comando Maven entra en vigencia:
$ MVN -Vapache Maven 3.3.9 (BB52D8502B132EC0A5A3F4C09453C07478323DC5; 2015-11-11T00: 41: 47+08: 00) Maven Home:/Aplications/IntelliJ Idea.App/Contents/PLUGINS/MAVEN/LIBAC Vendor: Oracle CorporationJava Home: /Library/Java/JavirtualMachines/jdk-10.jdk/contents/homedefault locale: zh_cn_#hans, plataforma codificación: utf-8os name: "mac os x", versión: "10.13.2", arco: "x86_64", familia: "Mac"
Luego modificamos debug:false en application.yml y usamos Maven para empaquetarlo (cambie el directorio al nivel pom.xml ):
$ MVN Clean Package -dmaven.test.skip = true [info] escaneo para proyectos ... [info] [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:resources (default-resources) @ spring-cloud-consul-sample ---[INFO] Using 'UTF-8' encoding to copy filtered resources.[INFO] Copying 2 resources[INFO] Copying 0 resource[INFO][INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ spring-cloud-consul-sample ---[INFO] Changes detected - recompiling the module![INFO] Compiling 1 source file to /Users/xishuai/Documents/Project file/test project/spring-cloud-consul-sample/target/classes[INFO][INFO] --- Maven-Resources-Plugin: 3.0.1: testResources (predeterminado-testresources) @ spring-ncloud-consponsul-sample --- [info] sin copiar recursos de prueba [info] [info] --- maven-compiler-plugin: 3.7.0: testCompile (test-test-compile) @ spring-nocoud-comonsul-sample ---- [info] que se compleja de la prueba de la prueba] [info] [info] Maven-Surefire-Plugin: 2.20.1: Test (Test Test) @ Spring-Cloud-Consul-Sample --- [Info] Las pruebas se omiten. [Info] [Info] --- Maven-Jar-plugin: 3.0.2: jar (default-jar) @ spring-nubsul-sample-sample --- [construcción] construcción jar:/usuarios/xishuai/documentos/archivos de proyecto/test/test/test/test/test/test/testing/testing/testing/testing files/test/testing/testing file Proyectos/Spring-Cloud-Consul-Sample/Target/Spring-Cloud-Consul-Sample-0.0.1-snapshot.jar [info] [info] --- spring-boot-saven-plugin: 2.0.0.release: reempackage (predeterminado) @ spring-cloud-consul-sample --- [info] ----------------------------------------------------------- --------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------
El paquete JAR generado estará en el directorio de destino, con el archivo spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar (el formato es项目名+ 版本号), y luego podemos iniciar el servicio directamente:
$ java -jar Target/Spring-Cloud-Consul-Sample-0.0.1-Snapshot.jar2018-03-28 10: 33: 31.750 Información 63875 --- [Main] SCAAnnotationConfigApplicationContext: Refreshing Org.ssPringFrameWork.context.Annotation.AnnotationConfigAppApplicationContext Fecha de inicio [miércoles 28 de marzo 10:33:31 CST 2018]; Raíz del contexto de la jerarquía: se ha producido una operación de acceso reflexivo ilegal al máximo: acceso reflexivo ilegal por org.springframework.cglib.core.reflectutils $ 1 (jar: file:/ussers/xishuai/documents/proyect/test 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!/) To Method java.lang.classloader.defineclass (java.lang.string, byte [], int, int, java.security.protectiondomain) Advertencia: Considere informar esto a los mantenedores de org.springframework.cglib.core.reflectutils $ 1warning: Use --iLegal-access = warnings de auxtings de au reflective access operationsWARNING: All illegal access operations will be denied in a future release2018-03-28 10:33:31.971 INFO 63875 --- [ main] faAutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring2018-03-28 10:33:32.015 INFO 63875 --- [Main] TrationDelegate $ BeanPostProcessCessChecker: Configuración de BeanPropertiesRebinderAutoconfiguration 'del tipo [org.springframework.cloud.autoconfigure.configurationPrepertiesRebinderAutoconfiguration $$ potenci Procesado por todos los procesadores de platos de frijoles (por ejemplo: no es elegible para la autoproxización). ____ __ _ /// ___'_ __ _ _ (_) _ __ __ _ / / / // (() / ___ | '_ |' _ | ////// ___) | | _) | | | | | | || (_ | |)))) '| ____ | .__ | _ | | _ | _ | | _/__, | //// = ====================================== ___/ =/ _/ _/ :: Spring Boot :: (v2.0.0.release)
Compruebe si la verificación de salud es exitosa:
Compruebe si el registro del servicio del cónsul es exitoso:
Compruebe si el clúster Fabio contiene servicios:
Después de que el registro del servicio sea exitoso, podemos descubrir manualmente el servicio, o descubrirlo a través del componente de cinta de nube de primavera/fingir, y proporcionar funciones de equilibrio de carga (similar a la función FABIO), y luego estudiarlo más tarde.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.