Ao configurar um endpoint de instância do MSE Nacos em uma aplicação Spring Cloud, a aplicação se registra automaticamente no registro de serviços do MSE Nacos durante a inicialização. Esse registro permite a descoberta de serviços, o gerenciamento de configurações e chamadas entre serviços. Este tópico mostra como conectar sua aplicação ao registro.
Pré-requisitos
Baixe e instale o Maven e configure suas variáveis de ambiente.
Crie um namespace. Este tutorial utiliza o namespace padrão,
Public.
Para acessar o MSE Nacos pela rede pública, tanto o provedor quanto o consumidor de serviços precisam ter acesso à rede pública. Adicione também os endereços IP das suas aplicações à lista de permissões da instância do MSE Nacos. Para mais informações, consulte Configure uma lista de permissões de endereços IP públicos.
Crie um provedor de serviços
Crie localmente uma aplicação de provedor de serviços, adicione as dependências necessárias, ative o registro e a descoberta de serviços e especifique sua instância do MSE Nacos como registro de serviços.
Crie um projeto Maven chamado nacos-service-provider.
-
No arquivo pom.xml, adicione as seguintes dependências.
Este exemplo usa Spring Boot 2.1.4.RELEASE e Spring Cloud Greenwich.SR1.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>A versão Spring Cloud Greenwich corresponde à versão 2.1.1.RELEASE do Spring Cloud Alibaba.
Se você utilizar a versão Spring Cloud Finchley, a versão correspondente do Spring Cloud Alibaba será a 2.0.1.RELEASE.
Caso utilize a versão Spring Cloud Edgware, a versão correspondente do Spring Cloud Alibaba será a 1.5.1.RELEASE.
ImportanteO ciclo de vida do Spring Cloud Edgware foi descontinuado. Recomendamos não utilizar esta versão para novas aplicações.
No diretório
src\main\java, crie um package chamadocom.aliware.edas.-
No package
com.aliware.edas, crie a classe de bootstrap do provedor de serviços ProviderApplication e adicione o seguinte código.package com.aliware.edas; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } }NotaA anotação
@EnableDiscoveryClientativa a funcionalidade de registro e descoberta de serviços para a aplicação. -
No package
com.aliware.edas, crie um EchoController. O método recebe um parâmetro do caminho da URL e o retorna na resposta.package com.aliware.edas; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class EchoController { @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET) public String echo(@PathVariable String string) { return string; } } -
No diretório
src\main\resources, crie um arquivo chamadoapplication.properties. Adicione a seguinte configuração ao arquivo e especifique o endpoint do servidor Nacos.spring.application.name=service-provider server.port=18081 spring.cloud.nacos.discovery.server-addr=mse.XX.nacos.mse.aliyuncs.com:8848 # To use a custom namespace, uncomment and configure the following line: #spring.cloud.nacos.discovery.namespace={namespaceId}Na página Instances, visualize o endpoint público da sua instância do MSE Nacos. O formato é mse.XX.nacos.mse.aliyuncs.com.
ImportanteSe você utilizar uma instância do MSE ZooKeeper ou Eureka como registro de serviços, substitua a configuração específica do Nacos nesta etapa pela configuração correspondente para ZooKeeper ou Eureka. Para mais informações, consulte Notas de uso para clusters do MSE.
-
Verifique se a aplicação foi registrada com sucesso.
Execute o método main da classe ProviderApplication no projeto nacos-service-provider para iniciar a aplicação.
Faça login no MSE console e selecione uma região na barra de navegação superior.
No painel de navegação à esquerda, escolha Microservices Registry > Instances. Clique em nome da instância.
Service ManagementServices
Na página Services, verifique se a aplicação service-provider aparece na lista.
Crie um consumidor de serviços
Esta seção demonstra como registrar um consumidor de serviços e usar a descoberta de serviços do Nacos com dois clientes: RestTemplate e FeignClient.
Crie um projeto Maven chamado nacos-service-consumer.
-
No arquivo pom.xml, adicione as seguintes dependências.
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> No diretório
src\main\java, crie um package chamadocom.aliware.edas.-
No package
com.aliware.edas, configure o RestTemplate e o FeignClient.-
Em
com.aliware.edas, crie uma classe de interface chamada EchoService, adicione a anotação@FeignCliente configure a URL HTTP e o método HTTP correspondentes.package com.aliware.edas; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @FeignClient(name = "service-provider") public interface EchoService { @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET) String echo(@PathVariable("str") String str); } -
Em
com.aliware.edas, crie a classe de bootstrap ConsumerApplication e adicione as configurações relevantes.Use a anotação
@EnableDiscoveryClientpara ativar o registro e a descoberta de serviços.Use a anotação
@EnableFeignClientspara ativar o FeignClient.Use a anotação
@LoadBalancedpara integrar o RestTemplate à descoberta de serviços.
package com.aliware.edas; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class ConsumerApplication { @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
-
-
No package
com.aliware.edas, crie uma classe chamada TestController para demonstrar e verificar o recurso de descoberta de serviços.package com.aliware.edas; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class TestController { @Autowired private RestTemplate restTemplate; @Autowired private EchoService echoService; @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET) public String rest(@PathVariable String str) { return restTemplate.getForObject("http://service-provider/echo/" + str, String.class); } @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET) public String feign(@PathVariable String str) { return echoService.echo(str); } } -
No diretório
src\main\resources, crie um arquivo chamado application.properties. Adicione a seguinte configuração ao arquivo para especificar o endereço do registro de serviços do Nacos.spring.application.name=service-consumer server.port=18082 spring.cloud.nacos.discovery.server-addr=mse.XX.nacos.mse.aliyuncs.com:8848 # To use a custom namespace, uncomment and configure the following line: #spring.cloud.nacos.discovery.namespace={namespaceId}Na página Instances, visualize o endpoint público da sua instância do MSE Nacos. O formato é
mse.XX.nacos.mse.aliyuncs.com.ImportanteSe você utilizar uma instância do MSE ZooKeeper ou Eureka como registro de serviços, substitua a configuração específica do Nacos nesta etapa pela configuração correspondente para ZooKeeper ou Eureka. Para mais informações, consulte Notas de uso.
-
Verifique se a aplicação foi registrada com sucesso.
Execute o método main da classe ConsumerApplication no projeto nacos-service-consumer para iniciar a aplicação.
Faça login no MSE console e selecione uma região na barra de navegação superior.
No painel de navegação à esquerda, escolha Microservices Registry > Instances. Clique em nome da instância.
Service ManagementServices
Na página Services, verifique se a aplicação service-consumer aparece na lista.
Testes locais
Teste localmente a chamada de serviço do consumidor para o provedor de serviços.
-
No Linux, Unix ou macOS, use os seguintes comandos para fazer as chamadas de serviço.
curl http://127.0.0.1:18082/echo-rest/rest-rest curl http://127.0.0.1:18082/echo-feign/feign-rest -
No Windows, insira
http://127.0.0.1:18082/echo-rest/rest-restehttp://127.0.0.1:18082/echo-feign/feign-restna barra de endereços do seu navegador.Uma resposta bem-sucedida retorna a string fornecida na URL. O primeiro comando retorna
rest-reste o segundo retornafeign-rest, confirmando que a chamada de serviço foi realizada com sucesso.consumer consumes Provider
Perguntas frequentes
Serviço não visível no MSE console
Configure a lista de permissões para o acesso da sua aplicação. Para mais informações, consulte Configure uma lista de permissões de endereços IP públicos.
Por padrão, a lista de permissões do MSE está definida como 127.0.0.1/32, bloqueando todo o acesso externo.
Versões suportadas do Spring Cloud
Para o Spring Cloud Greenwich, a versão correspondente do Spring Cloud Alibaba é a 2.1.1.RELEASE.
Quanto ao Spring Cloud Finchley, a versão correspondente do Spring Cloud Alibaba é a 2.0.1.RELEASE.
No caso do Spring Cloud Edgware, a versão correspondente do Spring Cloud Alibaba é a 1.5.1.RELEASE.
O ciclo de vida do Spring Cloud Edgware foi descontinuado. Recomendamos não utilizar esta versão para novas aplicações.