本文的主要是记录一下学习nacos的过程,今天主要讲的是使用nacos做服务注册和发现的步骤。 
 
 
 
 
 
  nacos是一款作为微服务架构中服务的注册和发现的插件, 
 类似于Consul、Eureka(这两款在学习的过程中也使用过,我的公司使用的就是Consul), 
 同时它又提供了分布式配置中心的功能(这一点还没有使用到,只是了解一些,手动哭脸)。 
 
 
 
 
 服务发现和服务健康监测
  
 动态配置服务,带管理界面,支持丰富的配置维度。
  
 动态 DNS 服务
  
 
下面是nacos官网,各位看官需要的话可以动手戳一下,中文提示比较友好。
 
 https://nacos.io/zh-cn/
 
 
 
  nacos是依赖于java环境,首先保证本机安装java环境, 
 然后从官网下载 
 
 
 Nacos的解压包,选择稳定版下载,下载如图的版本,由于github服务器在外国,可能会比较慢,请耐心等待,下载地址: 
 
 
 https://github.com/alibaba/nacos/releases 
 
 
 
 
 下载完成后,解压,在解压后的文件的/bin目录下,点击startup.cmd就可以启动nacos。见下图 
 

 
 
 
  启动之后会在控制台打印相关日志信息,nacos的默认启动端口是8848(听起来像8848钛金手机,可能巧合),启动后,浏览器访问 
 
http://localhost:8848/nacos 
 
  初始默认登陆用户名和密码都是nacos,登录后效果如下图: 
 
 
 

 
 
 
 
 
 在整个微服务架构中,服务的注册和发现是整个架构的基础。目前主流的服务注册和发现组件有Consul、Eureka、Etcd等。 
 
 
 
 
 
     在整个案例中我们将使用2个服务注册到nacos上,分别名称是 
 
 
     nacos-provider和nacos-consumer。 
 
 
 
 
     使用自己的IDEA新建一个springboot项目,其中主要的pom.xml文件依赖如下: 
 
 
  
  <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>0.9.0.RELEASE</version></dependency>
 
 
 
 
 在工程文件application.yml配置如下: 
 
 
  
 server: port: 8762 #项目启动端口spring: application: name: nacos-provider #项目名称,后面注册的时候就是使用这个名称 cloud: nacos: discovery:        server-addr: 127.0.0.1:8848 #nacos启动端口,项目就是需要往这个注册
 
 
 
  在项目的启动类上面加上@ 
 EnableDiscoveryClient注解,这样才能成为一个服务注册到nacos上面去 
 
 
 
 
  
 @SpringBootApplication@EnableDiscoveryClientpublic class NacosProviderApplication { public static void main(String[] args) { SpringApplication.run(NacosProviderApplication.class, args); }}
 
 
 
  此时 
 nacos-provider才算是构建完成,可以启动项目,在nacos可视化界面查看服务启动情况(http://localhost:8848/nacos),如图: 
 

 
  此时 
 nacos-provider算是正常注册到nacos上面。 
 
 
 
 
 
     nacos-consumer的创建过程与nacos-provider一致,只是在相关的yml文件配置上面有一些不一样的地方,启动端口是8763, 
 
 
 项目名称是nacos-consumer,具体配置如下: 
 
 
  
 server: port: 8763spring: application: name: nacos-consuer cloud: nacos: discovery: server-addr: 127.0.0.1:8848
 
 
 
 
 
  此时可以将两个项目同时启动,并且能在nacos控制台能看到相应的服务注册到nacos上面,如图: 
 
 
  至此,使用nacos作为服务的注册和发现组件已经完成了,各位是不是觉得非常简单 
 
  第一步,只要下载好nacos插件,在本地启动好,目前我还不清楚这个插件启动端口8848端口是否能更改。 
 
  第二步,构建相应的服务,引入相关依赖,在yml文件里面配置好服务端口,项目名称,注册到nacos的端口(8848)。 
 
 
 
 
 
  接下来的问题是既然构建 
 nacos-provider作为服务的提供者,那我们应该怎么消费这个服务呢? 
 
 
 
 
 
 nacos作为服务的发现和注册组件的时候,在进行服务消费的时候和使用Consul作为服务注册和发现的组件是一样的,没有什么区别。这是因为spring-cloud-starter-alibaba-nacos-discovery依赖实现了Spring Cloud服务注册和发现的相关接口,可以和其他服务注册发现组件无缝切换 
 
 
 
 
     在nacos-provider项目中,新建一个controller层,提供相应的API服务,代码如下:
 
 
 
  
 @RestControllerpublic class ProviderController {    @GetMapping("/hello")    public String hi(@RequestParam(value = "name")String name){                return "hello "+name; }}
 
 
 
 
 
      在这里使用的是 
 RestTemplate作为服务的消费方式,其他的消费方式还有使用 
 Feign来消费服务(这个没有使用过,如果需要下次会另写一篇文章来学习一下), 
 RestTemplate可以使用Ribbon作为负载均衡组件 
 ,首先在nacos-consumer工程中引入ribbon的依赖: 
 
 
  
 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId></dependency>
 
 
 
  在 
 nacos-consum 
 er启动类(NacosConsuerApplication) 
 
 
 
  
 @LoadBalanced@Beanpublic RestTemplate restTemplate(){ return new RestTemplate();}
 
 
 
 
 加上@LoadBalanced注解即可在RestTemplate上开启LoadBalanced负载均衡的功能。 
 
 
 
 在nacos-consumer项目中,新建一个controller层,作为服务的消费层,代码如下: 
 
 
  
 @RestControllerpublic class ConsumerController { @Autowired RestTemplate restTemplate;
    @GetMapping("/hiResttemplate")    public String hiResttemplate(@RequestParam(value = "name")String name){                return restTemplate.getForObject("http://nacos-provider/hello?name="+name,String.class); }}
 
 
 
  http://localhost:8763/hiResttemplate?name=caozhongying 
 
 
  就可以在浏览器显示出请求的响应结果,这就说明 
 可以在 
 nacos- 
 consum 
 er 
 端调用到 
 nacos-provide服务了,至此证明这时nacos-consumer调用nacos-provider服务成功。 
 
 
  到这里,这次分享就结束了,特别感谢方志朋老师的专栏对我的学习的帮助,您可以点击文章末尾的阅读原文链接进行学习。谢谢您的阅读,希望您的手指戳一下在看哟,期待下一次的相聚。