• Nacos(二):SpringCloud项目中接入Nacos作为注册中心


    前言

    通过上一篇文章:Nacos介绍 简单了解了Nacos的发展历程和现状,本文我们开始Nacos试水的第一步: 使用Nacos做注册中心

    上周末(7.6)Nacos发布了V1.1.0版本,这次更新支持灰度配置、地址服务器模式、配置文件导入导出等其他功能。感觉社区的老哥们都很高产呐....

    本文主要通过两个项目来完成演示:

    • nacos-provide:服务提供者
    • nacos-consumer:服务消费者

    将nacos-provide和nacos-consumer注册到Nacos-server,
    
    服务消费者nacos-consumer通过主动轮询获取他所订阅消费的服务信息列表
    
    nacos-consumer根据获取到的服务信息列表,进行服务调用。
    

    熟悉SpringCloud+Eureka的同学阅读完本文后可以无缝切换Nacos做注册中心

    我的环境

    • Windows10
    • JDK8
    • SpringCloud:Finchley.RELEASE
    • SpringBoot:2.0.4.RELEASE
    • spring-cloud-alibaba-dependencies:0.2.2.RELEASE
    • Nacos-server:1.0.1

    注:Nacos针对不同版本的SpingCloud提供不同的依赖,各个版本的对应关系请参考官方文档给出的说明:版本说明

    启动Nacos-server

    Nacos部分版本预览

    Nacos-server可以直接从github上下载安装包,当然你也可以拉取代码后自行打包

    本文我直接从官网下载Nacos-server:V1.0.1(为避免新版本V1.1.0有其他问题,我这里还是用V1.0.1)

    下载地址: https://github.com/alibaba/nacos/releases

    下载解压后进入bin文件夹(目录:nacos-server-1.0.1 acosin),直接双击执行startup.cmd文件,启动成功如下图:

    Nacos单机模式启动成功

    启动成功后,此时Nacos控制台就可以访问了,浏览器访问:http://127.0.0.1:8848/nacos/index.html ,默认的账号密码为nacos/nacos,控制台页面如下:

    nacos控制台界面

    创建服务提供者

    IDEA中创建聚合工程Nacos作为父工程,其pom.xml如下(重点关注dependencyManagement配置):

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>larscheng-learning-demo</artifactId>
            <groupId>com.study.www</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
        <version>0.0.1-SNAPSHOT</version>
        <modelVersion>4.0.0</modelVersion>
    
        <modules>
            <module>nacos-provide</module>
        </modules>
    
        <artifactId>Nacos</artifactId>
    
        <properties>
            <java.version>1.8</java.version>
            <spring-boot.version>2.0.4.RELEASE</spring-boot.version>
            <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
            <nacos.version>0.2.2.RELEASE</nacos.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>${spring-boot.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>${nacos.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
    </project>
    
    

    在父工程Nacos下创建springboot子工程nacos-provide,其pom.xml文件为:

    
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <artifactId>Nacos</artifactId>
            <groupId>com.study.www</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
        <groupId>com.larscheng.www</groupId>
        <artifactId>nacos-provide</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>nacos-provide</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    在NacosProvideApplication.java中提供一个对外接口,并添加注解 @EnableDiscoveryClient 开启服务注册发现功能:

    @RestController
    @EnableDiscoveryClient
    @SpringBootApplication
    public class NacosProvideApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(NacosProvideApplication.class, args);
        }
        
        @GetMapping("/helloNacos")
        public String helloNacos(){
            return "你好,nacos!";
        }
    }
    

    配置文件application.yml进行如下配置

    server:
      port: 9527
    spring:
      application:
        name: nacos-provide
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
    

    ok,服务提供者的创建和配置已经完成

    创建服务消费者

    仍然在Nacos工程下创建一个SpringBoot项目子工程命名为nacos-consumer,其pom文件与nacos-provide相同。

    同样为nacos-consumer增加配置文件,内容如下

    server:
      port: 9528
    spring:
      application:
        name: nacos-consumer
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
    

    服务消费者这里按照官方文档中的方式通过 RestTemplate+Ribbon进行服务调用,

    NacosConsumerApplication.java代码如下:

    @SpringBootApplication
    @EnableDiscoveryClient
    @RestController
    public class NacosConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(NacosConsumerApplication.class, args);
        }
        
        @Autowired
        private RestTemplate restTemplate;
    
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    
        @GetMapping("/consumer")
        public String test1() {
            String result = restTemplate.getForObject("http://nacos-provide/helloNacos",String.class);
            return "Return : " + result;
        }
    }
    

    ok,服务消费者的创建工作也已完成,下面启动两个项目,进行测试

    调用测试

    启动完成后,在日志中应该可以看到如下两条信息

    o.s.c.a.n.registry.NacosServiceRegistry  : nacos registry, nacos-provide 192.168.200.1:9527 register finished
        
    o.s.c.a.n.registry.NacosServiceRegistry  : nacos registry, nacos-consumer 192.168.200.1:9528 register finished
    

    现在登录Nacos控制台,你会发现服务列表中,已经显示了我们刚才创建的两个项目,并可以对其进行简单的监控和管理。

    服务列表

    浏览器中访问服务消费者的接口 http://127.0.0.1:9528/consumer, 可以看到成功返回结果

    Return : 你好,nacos!
    

    总结

    完成上面的服务发现和注册的测试后,我的第一感觉是,好像只用修改配置就可以替换Eureka,好像无缝支持SpringCloud ,
    带着这个内心的冲击感,我到公司的项目中简单试了下水,居然直接注册成功,并且各个服务之间正常使用,虽然只是单独的服务注册发现功能。但这能够说明Nacos天生就无缝衔接SpringCloud生态(当然他也有很多坑)

    看Nacos控制台中的几大分类,明显Nacos的能力绝不仅仅是注册中心这么简单,更多Nacos的使用姿势和坑点,我们未完待续~

    本文源码https://github.com/larscheng/larscheng-learning-demo/tree/master/Nacos

    参考感谢

    Nacos官方手册

  • 相关阅读:
    dll得到主窗體的handle
    将应用程序11M内存占用,降至500K
    是否想为你的Windows加上一双眼睛,察看使用者在机器上所做的各种操作(例如建立、删除文件;改变文件或目录名字)呢?
    TreeView 之间节点拖动 /移动
    Delphi与C之间的类型对应表
    以ADO数据集相连的DBGrid按单一字段排序通用过程
    为Delphi程序添加事件和事件处理器
    DataSetToTreeView
    一个系统空闲时间函数
    调用chm
  • 原文地址:https://www.cnblogs.com/larscheng/p/11388596.html
Copyright © 2020-2023  润新知