Spring Cloud Alibaba从入门到放弃-构建服务注册中心(Nacos)

                                         构建服务注册中心(Nacos)

什么是Nacos

Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

在接下里的教程中,将使用Nacos作为微服务架构中的注册中心(替代:eurekba、consul等传统方案)以及配置中心(spring cloud config)来使用。

安装Nacos

下载地址:https://github.com/alibaba/nacos/releases
本文版本:1.0.0

下载完成之后,解压。根据不同平台,执行不同命令,启动单机版Nacos服务:

  • Windows:cmd startup.cmd -m standalone

启动完成之后,访问:http://127.0.0.1:8848/nacos/,可以进入Nacos的服务管理页面,具体如下;

默认用户名密码为:nacos

Spring Cloud Alibaba从入门到放弃-构建服务注册中心(Nacos)_第1张图片

构建基于Nacos的注册中心

  • 创建服务提供者nacos-provider工程,引入pom.xml依赖:


    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.6.RELEASE
         
    
    com.lyh
    nacos-provider
    0.0.1-SNAPSHOT
    nacos-provider
    Demo project for Spring Boot

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        org.springframework.cloud
        spring-cloud-starter-alibaba-nacos-discovery
    
        
            org.projectlombok
            lombok
            1.18.2
            true
        
    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Finchley.SR1
                pom
                import
            
            
                org.springframework.cloud
                spring-cloud-alibaba-dependencies
                0.2.2.RELEASE
                pom
                import
            
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


  • 创建应用主类,并实现一个HTTP接口:
package com.lyh.nacosprovider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@EnableDiscoveryClient
@SpringBootApplication
public class NacosProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosProviderApplication.class, args);
    }


    @RestController
    static class TestController {
        @GetMapping("/hello")
        public String hello(@RequestParam String name) {
            return "hello " + name;
        }
    }
}
  • 在配置文件中配置服务名称和Nacos地址:
spring.application.name=nacos-provider
server.port=8001
spring.cloud.nacos.discovery.enabled=true
spring.cloud.nacos.discovery.register-enabled=true
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  • 启动应用我们可以访问Nacos的管理页面http://127.0.0.1:8848/nacos/来查看服务列表,此时可以看到如下内容:

Spring Cloud Alibaba从入门到放弃-构建服务注册中心(Nacos)_第2张图片

说明我们的生产者工程注册成功。

服务消费者

接下来,实现一个应用来消费上面已经注册到Nacos的服务。

第一步:创建一个Spring Boot应用,命名为:alibaba-nacos-discovery-client-common

第二步:编辑pom.xml中的依赖内容,与上面服务提供者的一样即可。

第三步:创建应用主类,并实现一个HTTP接口,在该接口中调用服务提供方的接口。

 

package com.lyh.nacosconsumer;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class NacosConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApplication.class, args);
    }




        @Autowired
        LoadBalancerClient loadBalancerClient;

        @GetMapping("/test")
        public String test() {
            // 通过spring cloud common中的负载均衡接口选取服务提供节点实现接口调用
            ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
            String url = serviceInstance.getUri() + "/hello?name=" + "didi";
            RestTemplate restTemplate = new RestTemplate();
            String result = restTemplate.getForObject(url, String.class);
            return "Invoke : " + url + ", return : " + result;
        }

}

这里使用了Spring Cloud Common中的LoadBalancerClient接口来挑选服务实例信息。然后从挑选出的实例信息中获取可访问的URI,拼接上服务提供方的接口规则来发起调用。

第四步:配置服务名称和Nacos地址,让服务消费者可以发现上面已经注册到Nacos的服务。

 

spring.application.name=nacos-consumer
server.port=8002
spring.cloud.nacos.discovery.enabled=true
spring.cloud.nacos.discovery.register-enabled=true
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

第五步:启动服务消费者,然后通过curl或者postman等工具发起访问,下面以postman为例:

localhost:9000/test

返回结果:hello didi,至此,基于nacos的基本注册中心搭建完成。

  • github源码地址

你可能感兴趣的:(微服务)