使用Nacos实现服务注册与发现

自从 Spirng Cloud Alibaba发布第一个Release以来,就备受国内开发者的重点关注,目前国内也有大量的开发者或企业团队开始小范围的试水,闲的蛋疼,我也打算试一波水。接下来看心情更新了。

什么是Nacos?

Nacos是个什么东东呢?
那就吧官方介绍搬过来咯!

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

为什么我要放弃eureka使用Nacos呢?
A: 叫你用你就用,哪来的这么多F话。
B:领导安排我用, 我就用,我想学习前沿技术我就要用
个人理解:

 因为eureka2.0不提供开源更新了
 因为Nacos = eureka+config

1、安装Nacos

下载地址:https://github.com/alibaba/nacos/releases
步骤:下载->解压->启动
windows下启动nacos:cmd到解压后的目录,输入startup.cmd -m standalone
控制台输入如下代表启动成功:

       ,--.
       ,--.'|
   ,--,:  : |                                           Nacos
,`--.'`|  ' :                       ,---.               Running in stand alone mode, All function modules
|   :  :  | |                      '   ,'\   .--.--.    Port: 8848 
:   |   \ | :  ,--.--.     ,---.  /   /   | /  /    '   Pid: 10076
|   : '  '; | /       \   /     \.   ; ,. :|  :  /`./   Console: http://192.168.3.253:8848/nacos/index.html   
'   ' ;.    ;.--.  .-. | /    / ''   | |: :|  :  ;_
|   | | \   | \__\/: . ..    ' / '   | .; : \  \    `.      https://nacos.io
'   : |  ; .' ," .--.; |'   ; :__|   :    |  `----.   \
|   | '`--'  /  /  ,.  |'   | '.'|\   \  /  /  /`--'  /
'   : |     ;  :   .'   \   :    : `----'  '--'.     /
;   |.'     |  ,     .-./\   \  /            `--'---'
'---'        `--`---'     `----'

启动完成之后访问http://127.0.0.1:8848/nacos/输入账号密码 默认都是nocos

2、服务提供者

  • 创建一个springboot项目,命名为:alibaba-nacos-discovery-server(可自己随意命名 )
  • 编辑pom.xml,加入必要的依赖。如下:


    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.5.RELEASE
         
    
    alibaba-nacos-discovery-server
    alibaba-nacos-discovery-server
    1.0-SNAPSHOT

    
        
            
                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-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
            org.projectlombok
            lombok
            1.18.2
            true
        
    

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

import lombok.extern.slf4j.Slf4j;
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;

/**
 * @author Wu_启龙
 * @version 1.0
 * @date 2020/7/10 16:56
 */
@SpringBootApplication
@EnableDiscoveryClient
public class TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }


    @Slf4j
    @RestController
    static class TestController {
        @GetMapping("/hello")
        public String hello(@RequestParam String name) {
            log.info("invoked name = " + name);
            return "hello:" + name;
        }
    }
}
  • 配置服务名称和Nacos地址
spring.application.name=alibaba-nacos-discovery-server
server.port=8001

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  • 启动上面创建的应用。可以在启动时候增加-Dserver.port=8001的形式在本机的不同端口上启动多个实例。
  • 在启动都ok之后,我们可以访问Nacos的管理页面http://127.0.0.1:8848/nacos/来查看服务列表,此时可以看到如下内容:
image.png

服务消费者

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

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

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

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

@EnableDiscoveryClient
@SpringBootApplication
public class TestApplication {

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

    @Slf4j
    @RestController
    static class TestController {

        @Autowired
        LoadBalancerClient loadBalancerClient;

        @GetMapping("/test")
        public String test() {
         
            /**
               *   通过spring cloud common中的负载均衡接口选取服务提供节点实现接口调用
               *   这里使用了Spring Cloud Common中的LoadBalancerClient接口来挑选服务实例信息。
               *  然后从挑选出的实例信息中获取可访问的URI,拼接上服务提供方的接口规则来发起调用。
             */
            ServiceInstance serviceInstance = loadBalancerClient.choose("alibaba-nacos-discovery-server");
            String url = serviceInstance.getUri() + "/hello?name=" + "didi";
            RestTemplate restTemplate = new RestTemplate();
            String result = restTemplate.getForObject(url, String.class);
            return "Invoke : " + url + ", return : " + result;
        }
    }
}
  • 第四步: 配置服务名称和Nacos地址,让服务消费者可以发现上面已经注册到Nacos的服务。
spring.application.name=alibaba-nacos-discovery-client-common
server.port=9000
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  • 第五步:启动服务消费者,然后通过curl或者postman等工具发起访问,下面以curl为例:
$ curl localhost:9000/test
Invoke : http://10.123.18.216:8001/hello?name=didi, return : hello didi
$ curl localhost:9000/test
Invoke : http://10.123.18.216:8002/hello?name=didi, return : hello didi

可以看到,两次不同请求的时候,真正实际调用的服务提供者实例是不同的,也就是说,通过LoadBalancerClient接口在获取服务实例的时候,已经实现了对服务提供方实例的负载均衡。但是很明显,这样的实现还是比较繁琐,预告下后面的几篇,关于服务消费的几种不同姿势。

参考资料

Nacos官方文档
Nacos源码分析

你可能感兴趣的:(使用Nacos实现服务注册与发现)