Spring Cloud é uma ferramenta de desenvolvimento de aplicativos em nuvem com base na inicialização da primavera. Ele fornece um método de desenvolvimento simples para gerenciamento de configurações, descoberta de serviços, disjuntores, roteamento inteligente, micro-agentes, barramento de controle, bloqueios globais, campanhas de tomada de decisão, sessões distribuídas e gerenciamento de estados de cluster envolvidos no desenvolvimento de aplicativos em nuvem baseados em JVM. Reembalar e proteger configurações complexas e princípios de implementação através do estilo de inicialização da primavera, deixando os desenvolvedores com um kit de ferramentas de desenvolvimento de sistema simples, fácil de entender, fácil de implantar e fácil de manter.
A Spring Cloud inclui vários subprojetos (para vários produtos diferentes de código aberto envolvidos em sistemas distribuídos), 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 e outros projetos.
Endereço do projeto: https://github.com/yuezhongxin/spring-clod-consul-sample
Implementação do ASP.NET Core 2.0 & Docker & Consul: https://github.com/yuezhongxin/hellodocker.sample
O site de teste atual usa o ASP.NET Core para combinar Conusl e Fabio para criar um cluster de microsserviço. Como a comunicação entre cada serviço é baseada no protocolo HTTP REST, a implementação do serviço pode ser de língua cruzada. Vamos desenvolver um serviço de inicialização de primavera e, em seguida, usar o Spring Cloud Consul para registrar o serviço no cluster existente.
A ferramenta de desenvolvimento Java que escolhi Intellij Idea (tutorial de instalação do MacOS), que atualmente é usado muito bem (o esquema de cores usa a darcula do sistema, tamanho da fonte 14), e o Java SDK precisa de download e instalação adicionais (versão 10 I instalei).
Como usei a Intellij Idea pela primeira vez, publicarei o processo de criação de um projeto em detalhes abaixo.
Primeiro, crie um projeto (selecione "Spring Initializr", Spring Boot Project) e selecione Java SDK 10 por padrão:
Em seguida, preencha as informações básicas do projeto (o artefato é "Spring-Cloud-Cônsul-Sple", outros são o padrão):
NOTA: O MAVEN é uma ferramenta de gerenciamento e construção de projetos que contém três componentes principais: o modelo de objeto do projeto (POM), o modelo de gerenciamento de dependência, o ciclo de vida de construção e o palco.
A diferença entre ID do grupo e ID do artefato. Se o ID do grupo for considerado uma empresa, o ID do artefato poderá ser considerado um departamento da empresa, que é um pouco semelhante ao relacionamento entre soluções e bibliotecas de classes no .NET. Por exemplo, o ID do grupo de um projeto de nuvem de primavera é org.springframework.cloud , e o ID do artefato do cônsul da nuvem de primavera é spring-cloud-starter-consul-discovery .
A seguir, é apresentado o tipo de projeto de inicialização da primavera (selecione as dependências da web):
Em seguida, preencha o nome do projeto e o diretório do projeto:
Em seguida, clique em "Concluir" e está pronto.
Como o desenvolvimento de um aplicativo ASP.NET Core, precisamos fazer referência a vários pacotes primeiro e o mesmo se aplica aos projetos de inicialização da primavera. Como usamos o MAVEN para gerenciamento de dependência, precisamos configurar as dependências no pom.xml e configurá -las da seguinte forma:
<Parent> <voundiD> org.springframework.boot </frugid> <TRATIFACTID> Spring-boot-Starter-Parent </ArtifactId> <Versão> 2.0.0.release </sipers> <RelityPath/> <!-Lookup Parent from Repository-> </Direnties> </superies> <! <Project.build.sourceEncoding> utf-8 </project.build.sourceEncoding> <ject.reporting.outputencoding> utf-8 </project.reporting.outputEncoding> <nava.version> 1.8 </java.version> </prophers> <GrupidId> org.springframework.boot </groupiD> <TRARFACTID> Spring-boot-starter-web </stutifactId> </dependency> <pendence> <puperid> org.springframework.cloud </frupid> <stifactId> Spring-cloud-starter-conSul-Discurso <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependências> <pendencyManagement> <pendências> <pendencency> <puperid> org.springframework.cloud </groupiD> <TRARFACTID> Spring-cloud-consul-dependências </putifactid> <siersher> 2.0.m7 </version> <pom> </type> </scope> </scope> <suply> 2.0.0.m7 </versão> <pom> </type> <Cope>
A referência spring-cloud-starter-consul-discovery corresponde ao cônsul da nuvem de primavera, e o spring-boot-starter-actuator é usado como uma verificação de saúde (endereço /actuator/health ). Além disso, o atuador também suporta o monitoramento e o gerenciamento de projetos.
Vamos falar sobre o papel dos nós aqui:
parent : a configuração de referência dos pais herdará a configuração de referência dos pais.dependencies : a configuração de referência atual. Se a referência dos pais estiver configurada, o projeto infantil será referenciado automaticamente.dependencyManagement : é claro, configuração de referência. Se a referência dos pais estiver configurada, o projeto infantil não será referenciado automaticamente. O projeto infantil só precisa ser referenciado quando usado e o número da versão não é necessário. Em seguida, poste o código de SpringCloudConsulSampleApplication.java :
pacote com.example.springcloudConsulsample; importar org.springframework.beans.factory.annotation.autowired; importar org.springframework.boot.springApplication; importação org.springframework.boot.autoconfigure.springbootApplication; org.springframework.web.bind.annotation.requestmapping; importar org.springframework.web.bind.annotation.restcontroller; importar org.springframework.cloud.client.discovery.enablediscoverclient; import org.springframework.cloud.client.discovery.discoveryclient;@enablediscoveryclient@RestController@SpringbooTapplicationPublic Classe SpringCloudConsulsampleApplication {@Autowired Private Discoveryclient Discoveryclient; /*** Obtenha todos os serviços*/@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); }} Adicione a anotação @EnableDiscoveryClient . Quando o projeto é iniciado, o serviço atual de inicialização da mola será registrado.
Ao registrar um serviço usando o CORE ASP.NET, as informações de configuração serão preenchidas no código (como nome e porta de serviço, etc., e é claro que também pode estar no arquivo de configuração) e, em seguida, o serviço será registrado usando o componente consul (chamado de consul http rest).
Se você registrar um serviço no Spring Cloud Consul, precisará adicionar um arquivo de configuração (o arquivo de recursos do projeto de inicialização do Spring Boot estará no diretório de recursos).
Adicione a configuração no application.properties :
spring.Application.Name = Spring-Boot-Service
Em seguida, adicione o arquivo de configuração application.yml :
Then add the application.yml configuration file: debug: trueserver: port: 24543spring: cloud: consult: host: 127.0.0.1 port: 8500 discovery: register: true hostname: 10.9.10.215 serviceName: ${spring.application.name} healthCheckPath: /actuator/health healthCheckInterval: 15s tags: urlprefix-/$ {spring.application.name} instanceId: $ {spring.application.name}: $ {vcap.application.instance_id: $ {spring.application.instance_id: $ {Random.value}}}A configuração acima precisa ser explicada em detalhes:
debug é se deve depurar o modo e, se embalado e publicado, ele precisa ser definido como false .server.port configura a porta do serviço de inicialização da mola.spring.cloud.consul.host/port configura o endereço e a porta do cônsul local (o nó do servidor e o nó do cliente podem ser usados). Spring Cloud Consul chamará a interface REST HTTP do Consul para registrar o serviço.spring.cloud.consul.discovery.true configura se deve registrar um serviço ao iniciar,spring.cloud.consul.discovery.hostname configura o endereço do host do serviço de inicialização da primavera, ou pode ser configurado sem a configuração e o endereço local padrão é.spring.cloud.consul.discovery.serviceName configura o nome do serviço registrado no cônsul. A variável ${spring.application.name} é a configuração que adicionamos no arquivo de configuração application.properties acima.spring.cloud.consul.discovery.healthCheckPath Configura o endereço de verificação de saúde do cônsul. O componente do atuador nos ajuda a implementá -lo, por isso não precisamos de implementação adicional. O endereço pode ser visto nas informações de impressão quando o serviço é iniciado.spring.cloud.consul.discovery.healthCheckInterval configura a frequência da verificação de saúde do cônsul, ou seja, frequência de batimentos cardíacos.spring.cloud.consul.discovery.tags configura as tags do Serviço de Registro do Consul, definido para o formato do urlprefix-/serviceName e é automaticamente registrado no cluster Fabio.spring.cloud.consul.discovery.instanceId Configura ID do serviço de registro do consul.Depois que o trabalho acima é concluído, também precisamos iniciar cônsul e fabio localmente
Em seguida, podemos depurar diretamente o projeto usando o Intellij Idea e pressionar Shift + F9 para depurar.
O acima mencionado as informações de impressão do atuador:
2018-03-28 10: 09: 54.645 Info 63482 --- [Main] SbaewswebmvcendPoinThandLermapping: mapeado "{[/tuator/health ].methods=GETATER ].Produces=Pplication/VND.Spring-Boot.actuator] java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-03-28 10: 09: 54.646 Info 63482 --- [Principal] SbaewswebmvcendPoinThandLermapping: mapeado "{[/tuator/info ].methods=GETTULATOR.PRODUCES=Pplication/vnd.spring-Boot.actuator.get2suator.Groduces=Pplication/vnd.spring-Boot.actuator.get2 java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-03-28 10: 09: 54.647 Info 63482 --- [Principal] SbaewswebmvcendPoinThandLermapping: mapeado "{[/tuator ].methods=[get ].produces=Pplication/vnd.spring-Boot.actator.vator.voduces=pplication/vnd.spring-boot.actator.vator.voduces= 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.htttletLeox
Ou podemos usar o Maven para empacotar a versão e iniciar o serviço com o comando. Você pode usar o Maven no Intellij Idea para empacotá -lo ou usar o comando maven para empacotá -lo. Aqui usamos o comando maven para empacotá -lo.
Quando instalamos o Intellij Idea, o Maven foi instalado automaticamente, mas atingir diretamente mvn -v descobrirá que o comando não pode ser encontrado, portanto, precisamos configurar as variáveis de ambiente.
Meu próprio diretório de arquivos maven é /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3 , que pode ser encontrado nas configurações da Ideaj Idea e, em seguida, executamos o seguinte comando:
$ 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"
Em seguida, verifique se o comando maven entra em vigor:
$ mvn -vApache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)Maven home: /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3Java version: 10, Vendor: Oracle CorporationJava Home: /library/java/javavirtualmachines/jdk-10.jdk/contents/homedefault Locale: zh_cn_#hans, codificação da plataforma: utf-8os Nome: "Mac Os x", versão: "10.13.2", Arch: "
Em seguida, modificamos debug:false no application.yml e usamos o maven para empacotá -lo (alterne o diretório para pom.xml ):
$ mvn pacote limpo -dmaven.test.skip = true [info] digitalização para projetos ... [info] [info] ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Spring-cloud-consul-amostra --- [info] delete/usuários/xishuai/documents/arquivos de projeto/projeto de teste/spring-cloud-consul-sample/alvo [info] [info] --- maven-resources-plugin: 3.0.1: Recursos (default-resources) @ spring-clod-sample --- [] usando 'utf]' utf-8 'utf-8' utf-8 'utf-8' ustf [utf-8 '' ustf [shall-8 '' '. Copiando 0 recurso [info] [info] --- MAVEN-COMPILER-PLUGIN: 3.7.0: Compile (padrão-compile) @ Spring-Cloud-Consul-Sple --- [info] Alterações detectadas-Recompilar o módulo/módulo! MAVEN-RESOURCES-PLUGIN: 3.0.1: TestResources (padrão-testources) @ spring-cloud-consul-sple --- [info] não copiando recursos de teste [info] [info] --- MAVEN-COMPILER-PLUGIN: 3.7.0: Testcompile (Test-TestiLing [compilador) @ Spring-Cloud-Co-ConconSoMple: MAVEN-SUREFIRE-PLUGIN: 2.20.1: teste (teste padrão) @ Spring-cloud-consul-sple --- [Info] Os testes são ignorados. [Info] [Info] --- maven-jar-plugin: 3.0.2: jar (default-jar) @ spring-cloud-consul-sample --- [] jarra de construção: Projetos/Spring-Cloud-Consul-Sple/Target/Spring-Cloud-Consul-Sample-0.0.1-Snapshot.jar [Info] [Info] --- Spring-Boot-Maven-Plugin: 2.0.0.release: Repackage (padrão) @ Spring-Cloud-Consul-Sample --- [Informações] ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
O pacote de jar gerado estará no diretório de destino, com o arquivo spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar (o formato é项目名+ 版本号) e, em seguida, podemos iniciar o serviço diretamente:
$ java -jar target/spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar2018-03-28 10:33:31.750 INFO 63875 --- [ main] scaAnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2b662a77: Data de inicialização [Qua 28 de março 10:33:31 CST 2018]; Raiz do hierarquia de contexto: ocorreu uma operação de acesso reflexivo ilegal: acesso reflexivo ilegal por org.springframework.cglib.core.reflectutils $ 1 (jar: arquivo:/users/xishuai/documentos/arquivo de projeto/teste Projeto/Spring-Cloud-Consul-Sple/Target/Spring-Cloud-Consul-Sample-0.0.1-snapshot.jar! /Boot-inf/lib/spring-core-5.0.4.release.jar!/) Para método java.lang.classloader.defineclass (java.lang.string, byte [], int, int, java.security.protectionDomain) AVISO: Considere relatar isso aos mantenedores de org.springframework.cglib.core.CeflectUtils $ 1Warningning: uselningalwalwalwal.clib.core. OperationsWarning: Todas as operações de acesso ilegal serão negadas em um futuro lançamento2018-03-28 10: 33: 31.971 Info 63875 --- [Main] faautowiredannotationBeanPostProcessor: JSR-330 'Javax.Inject.Inject' ANNOTATIONATION30: AUTOWIRING: 63875 --- [Principal] trationDelegate $ beanpostprocessorChecker: Bean 'ConfigurationPropertiesRebinderautoconfiguration' do tipo [org.springFramework.cloud.autoconfigure.configurationPropertiesReBindeRoToToconglousTration] Elegível para ser processado por todos os processadores de beanPosts (por exemplo: não elegível para improvisar automaticamente). ____ __ _ /// ___'_ __ _ _ (_) _ __ __ _ / / // (() / ___ | '_ |' _ | / // // ___) | | _) | | | | | | || (_ | |)))) '| ____ | .__ | _ | | _ | _ | | _/__, | //// ===================================== ___/ =/ _/ _/ :: boot de primavera :: (v2.0.0.release)
Verifique se a verificação de saúde é bem -sucedida:
Verifique se o registro do serviço consul é bem -sucedido:
Verifique se o cluster Fabio contém serviços:
Depois que o registro do serviço for bem -sucedido, podemos descobrir manualmente o serviço ou descobri -lo através do componente Ribbon/Feign da Spring Cloud e fornecer funções de balanceamento de carga (semelhante à função Fabio) e depois estudá -lo posteriormente.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.