vlambda博客
学习文章列表

如何使用nacos服务注册和发现

本文的主要是记录一下学习nacos的过程,今天主要讲的是使用nacos做服务注册和发现的步骤。

一、什么是nacos
nacos是一款作为微服务架构中服务的注册和发现的插件, 类似于Consul、Eureka(这两款在学习的过程中也使用过,我的公司使用的就是Consul), 同时它又提供了分布式配置中心的功能(这一点还没有使用到,只是了解一些,手动哭脸)。

在官方给出的关键特性如下:
  • 服务发现和服务健康监测

  • 动态配置服务,带管理界面,支持丰富的配置维度。

  • 动态 DNS 服务

下面是nacos官网,各位看官需要的话可以动手戳一下,中文提示比较友好。

 https://nacos.io/zh-cn/

    
二、下载nacos
nacos是依赖于java环境,首先保证本机安装java环境, 然后从官网下载
Nacos的解压包,选择稳定版下载,下载如图的版本,由于github服务器在外国,可能会比较慢,请耐心等待,下载地址:
https://github.com/alibaba/nacos/releases


下载完成后,解压,在解压后的文件的/bin目录下,点击startup.cmd就可以启动nacos。见下图

如何使用nacos服务注册和发现



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

如何使用nacos服务注册和发现


三、使用 Nacos做服务注册和发现

在整个微服务架构中,服务的注册和发现是整个架构的基础。目前主流的服务注册和发现组件有Consul、Eureka、Etcd等。

    3.1服务注册
    
    在整个案例中我们将使用2个服务注册到nacos上,分别名称是
    nacos-provider和nacos-consumer

    构建服务提供者nacos-provider
    使用自己的IDEA新建一个springboot项目,其中主要的pom.xml文件依赖如下:
 <!--web依赖主要是使得项目是一个web项目--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
 <!--nacos依赖主要是s使用nacos必须要的以来--><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服务注册和发现

此时 nacos-provider算是正常注册到nacos上面。

     构建服务消费者nacos-consumer

    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)
中注入 RestTemplate的Bean:
@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){        // 下面就是消费服务的代码,其中nacos-provider就是注册到nacos上面的服务的名称,hello就是相应的服务Url        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服务成功。

到这里,这次分享就结束了,特别感谢方志朋老师的专栏对我的学习的帮助,您可以点击文章末尾的阅读原文链接进行学习。谢谢您的阅读,希望您的手指戳一下在看哟,期待下一次的相聚。