轻量级注册中心接入
所有文档

          云原生微服务应用平台 CNAP

          轻量级注册中心接入

          轻量级注册中心

          轻量级注册中心主要为开发者提供本地轻量级注册中心服务,为开发者提供在开发、联调、测试阶段的服务注册、发现等功能;

          前提条件

          在使用轻量级注册中心前,请确保:

          • 环境安装JDK1.8并完成环境配置;
          • 确保端口8600、8500、8301、8302和8300端口未被占用;

          轻量级注册中心安装

          下载

          推荐您找一台机器(如本地),在保证网络环境通常的前提下,下载按照Consul注册中心;

          轻量级注册中心Consul支持多种操作系统,如Windows、Linux/MacOS操作系统,请根据实际情况下载:

          安装

          端口检查

          在安装Consul轻量级注册中心之前,请确保下面的端口没有被占用。

          用途 默认端口
          DNS: The DNS server (TCP and UDP) 8600
          HTTP: The HTTP API (TCP Only) 8500
          LAN Serf: The Serf LAN port (TCP and UDP) 8301
          Wan Serf: The Serf WAN port (TCP and UDP) 8302
          server: Server RPC address (TCP Only) 8300

          安装步骤

          1. 将已经下载的安装包解压,解压后会发现其中包含Consul 二进制文件。
          2. 按照如下命令启动

            Windows操作系统:

            .\consul.exe agent -dev

            Linux/MacOS系统:

            ./consul agent -dev

          说明:也可将consul文件的位置加入PATH的环境变量中,方便任意位置执行命令;

          3.验证是否启动,通过访问地址http://127.0.0.1:8500 来查看是否UI正常启动,正常启动后可通过UI 界面点击Nodes,观察Healthy Nodes,正常情况下会显示一个节点,且该节点为Leader节点。

          使用轻量级注册中心

          SDK说明

          <dependency>
              <groupId>com.baidubce.formula</groupId>
              <artifactId>spring-cloud-formula-cnap</artifactId>
              <version>{version}</version>
          </dependency>

          其中的版本号信息version,可前往Maven仓库中查找使用最新版本。

          创建服务提供者

          在本地创建服务提供者应用工程,并添加依赖,开启服务注册与发现功能,并将注册中心指定为本地注册中心。

          1. 创建命名为provider-demo的Maven工程,JDK选择1.8。
          2. pom.xml中添加依赖。
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>2.0.7.RELEASE</version>
              <relativePath/>
          </parent>
           
          <dependencyManagement>
              <dependencies>
                  <dependency>
                      <groupId>org.springframework.cloud</groupId>
                      <artifactId>spring-cloud-dependencies</artifactId>
                      <version>Finchley.SR2</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>
              </dependencies>
          </dependencyManagement>
           
          <dependencies>
              <!-- 添加依赖 -->
              <dependency>
                  <groupId>com.baidubce.formula</groupId>
                  <artifactId>spring-cloud-formula-cnap</artifactId>
                  <version>{version}</version>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
          </dependencies>

          这里以Spring boot 2.0.7.REALEASE 和 Spring Cloud Finchley.SR2为例,添加对应依赖。

          3.创建服务提供者启动类,开启服务注册发现功能

          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);
              }
          }

          4.创建简单的Controller,包含一个方法获取URL中的参数。

          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
          @RequestMapping(value = "/echo")
          public class EchoController {
          
              @RequestMapping(value = "/{message}", method = RequestMethod.GET)
              public String echo(@PathVariable String message) {
          
                  return message;
              }
          }

          5.在src\main\resources路径下创建文件application.properties,在application.properties中添加如下配置,指定注册中心地址信息。若您未指定注册中心地址,默认地址为http://127.0.0.1:8500。

          spring.application.name=provider-demo
          server.port=10001
          
          # 默认注册中心地址信息如下,若您部署在其他机器,请更换为对应机器地址信息
          formula.discovery.host=http://127.0.0.1
          formula.discovery.port=8500

          6.验证结果

          i)启动ProviderApplication中main函数;

          ii)访问注册中心控制台 http://127.0.0.1:8500;

          iii)在顶部选择Services即可查看对应注册的服务信息,可以看到服务列表中已经包含了provider-demo,且点击服务名可在详情中可以查询该服务的详情;

          创建服务消费者

          在本地创建服务消费者应用工程,并添加依赖,开启服务注册与发现功能,并将注册中心指定为本地注册中心。

          同时分别通过RestTemplate、FeignClient这两种方式去调用服务提供者。

          1. 创建命名为consumer-demo的Maven工程,JDK选择1.8。
          2. pom.xml中添加依赖。
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>2.0.7.RELEASE</version>
              <relativePath/>
          </parent>
           
          <dependencyManagement>
              <dependencies>
                  <dependency>
                      <groupId>org.springframework.cloud</groupId>
                      <artifactId>spring-cloud-dependencies</artifactId>
                      <version>Finchley.SR2</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>
              </dependencies>
          </dependencyManagement>
           
          <dependencies>
              
              <!-- 添加依赖 -->
              <dependency>
                  <groupId>com.baidubce.formula</groupId>
                  <artifactId>spring-cloud-formula-cnap</artifactId>
                  <version>{version}</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>

          这里以Spring boot 2.0.7.REALEASE 和 Spring Cloud Finchley.SR2为例,添加对应依赖。

          3.创建服务消费者启动类,开启服务注册发现功能

          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);
              }
          }

          如上需要额外添加@EnableFeignClients注册激活FeignClient,添加@LoadBalance注解将RestTemplate与服务发现集成

          4.创建FeignClient接口

          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 = "provider-demo")
          public interface EchoService {
              @RequestMapping(value = "/echo/{message}", method = RequestMethod.GET)
              String echo(@PathVariable("message") String message);
          }

          其中:FeignClient的名称provider-demo为服务提供者工程中配置的服务名(spring.application.name)

          5.创建简单的Controller,包含一个方法获取URL中的参数。

          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 EchoController {
          
              @Autowired
              private RestTemplate restTemplate;
          
              @Autowired
              private EchoService echoService;
          
              @RequestMapping(value = "/echo-rest/{message}", method = RequestMethod.GET)
              public String rest(@PathVariable String message) {
                  return restTemplate.getForObject("http://provider-demo/echo/" + message, String.class);
              }
          
              @RequestMapping(value = "/echo-feign/{message}", method = RequestMethod.GET)
              public String feign(@PathVariable String message) {
                  return echoService.echo(message);
              }
          }

          6.在src\main\resources路径下创建文件application.properties,在application.properties中添加如下配置,指定注册中心地址信息。若您未指定注册中心地址,默认地址为http://127.0.0.1:8500。

          spring.application.name=consumer-demo
          server.port=9999
          
          # 默认注册中心地址信息如下,若您部署在其他机器,请更换为对应机器地址信息
          formula.discovery.host=http://127.0.0.1
          formula.discovery.port=8500

          7.验证结果

          i)启动ConsumerApplication中main函数;

          ii)访问注册中心控制台 http://127.0.0.1:8500;

          iii)在顶部选择Services即可查看对应注册的服务信息,可以看到服务列表中已经包含了consumer-demo,且点击服务名可在详情中可以查询该服务的详情;

          本地测试

          上述步骤完成后,通过查看轻量级注册中心页面(http://127.0.0.1:8500/ui/dc1/services ),如下图,显示已经注册的consumer-demo和provider-demo服务。

          registry-service.png

          在本地测试消费者对提供者的服务调用情况,如下:

          • Linux/MacOS系统:
          curl http://localhost:9999/echo-rest/hello
          curl http://localhost:9999/echo-feign/hello
          上一篇
          service-mesh-应用接入