前言

通过上一篇文章: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-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\nacos\bin),直接双击执行startup.cmd文件,启动成功如下图:

启动成功后,此时Nacos控制台就可以访问了,浏览器访问:http://127.0.0.1:8848/nacos/index.html ,默认的账号密码为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官方手册

Nacos(二):SpringCloud项目中接入Nacos作为注册中心的更多相关文章

  1. Nacos(四):SpringCloud项目中接入Nacos作为配置中心

    前言 通过前两篇文章: Nacos(二):Nacos与OpenFeign的对接使用 Nacos(三):SpringCloud项目中接入Nacos作为注册中心 相信大家已经对Nacos作为注册中心的基本 ...

  2. SpringCloud项目中接入Nacos作为注册中心

    具体demo         https://blog.csdn.net/qq_33619378/article/details/95212754 <?xml version="1.0 ...

  3. SpringCloud项目中使用Nacos作为注册中心

    SpringCloud和Nacos的介绍原理在这里就不多说了,百度一大堆,这里就只是记录一下刚开始学习时候项目的使用过程 Nacos-server 我这里是从官网下载的Nacos-server 下载地 ...

  4. SpringCloud项目中使用Nacos作为配置中心

    参考:https://blog.csdn.net/qq_33619378/article/details/96991237 Nacos-server启动 这里就不说了 新建配置 在Nacos-Serv ...

  5. Nacos笔记01——使用Nacos作为SpringCloud项目的服务注册中心

    前言 刚学SpringCloud时使用eureka作为服务注册中心,随着网飞公司eureka2.x不再更新,以及最近在公司实习接触到的SpringCloud项目是使用Nacos来做服务注册中心的,所以 ...

  6. SpringCloud学习心得—1.2—Eureka注册中心的密码认证、高可用的设置

      SpringCloud学习心得—1.2—Eureka注册中心的密码认证.高可用的设置 这是相关代码 链接 Eureka开启密码配置 添加依赖 <dependency> <grou ...

  7. springCloud系列教程01:Eureka 注册中心集群搭建

    springCloud系列教程包含如下内容: springCloud系列教程01:Eureka 注册中心集群搭建 springCloud系列教程02:ConfigServer 配置中心server搭建 ...

  8. springlcoud中使用consul作为注册中心

    好久没写博客了,从今天开始重新杨帆起航............................................ springlcoud中使用consul作为注册中心. 我们先对比下注册 ...

  9. salesforce零基础学习(七十二)项目中的零碎知识点小总结(一)

    项目终于告一段落,虽然比较苦逼,不过也学到了好多知识,总结一下,以后当作参考. 一.visualforce标签中使用html相关的属性使用 曾经看文档没有看得仔细,导致开发的时候走了一些弯路.还好得到 ...

随机推荐

  1. 如何进行高效的源码阅读:以Spring Cache扩展为例带你搞清楚

    摘要 日常开发中,需要用到各种各样的框架来实现API.系统的构建.作为程序员,除了会使用框架还必须要了解框架工作的原理.这样可以便于我们排查问题,和自定义的扩展.那么如何去学习框架呢.通常我们通过阅读 ...

  2. 如果通过脚本来关闭程序-linux

    正常情况下在linux关闭一个程序最好是走正常的关闭流程,不要直接杀死进程,这样程序的稳定性确实会收到影响,但是如果想通过脚本来关闭程序正常情况下比较困难的,我便采取了这种暴力的方法-直接杀死进程. ...

  3. 面试题((A)null).fun()——java中null值的强转

    面试题分享 public class A {public static void fun1() { System.out.println("fun1"); } public voi ...

  4. Kotlin之var和val区别

    var 和 val 是Kotlin的两个声明变量的关键字, var声明的变量是一个可变的变量,而val声明的变量是一个只读的变量(类似于java中的final变量)

  5. Java中常见的异常类型

    一. Java中常见的异常类 异常类 说明 ClassCastException 类型准换异常 ClassNotFoundException 未找到相应类异常 ArithmeticException ...

  6. 单页面(如react,vue)网站的服务器渲染 SSR 之 SEO 大杀器 Rendertron

    单页面网站,比如vue.recat框架的网站,一般都是直接从服务器推送index.html,再根据自身路由通过js在客户端浏览器渲染出完整的html页面. 但是搜索引擎的爬虫可没有这么智能(实际上go ...

  7. idea中写servlet时报错--关于405错误

    将super方法注释掉 原因:super是调用了此类继承父类doget和dopost方法的, 如果此类中没有这个方法,就会报错The specified HTTP method is not allo ...

  8. python编码问题——解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX

    python实现爬虫遇到编码问题: error:UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX ...

  9. 极力推荐一个简单好用的C++JSON库

      极力推荐一个简单好用的C++JSON库CJsonObject,让使用json如使用C++原生的结构体那般方便,随心所欲.CJsonObject是个优秀的C++JSON库,也许会是你见过的最为简单易 ...

  10. oracle的本地远程连接和配置

    Oracle数据库的远程连接可以通过多种方式来实现,本文我们主要介绍四种远程连接的方法和注意事项,并通过示例来说明,接下来我们就开始介绍. 第一种情况: 若oracle服务器装在本机上,那就不多说了, ...