Nacos服务注册和发现

Nacos服务注册和发现

什么是Nacos?

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 是Spring Cloud A 中的服务注册发现组件,类似于Consul、Eureka,同时它又提供了分布式配置中心的功能,这点和Consul的config类似,支持热加载。

Nacos 的关键特性包括:

  • 服务发现和服务健康监测
  • 动态配置服务,带管理界面,支持丰富的配置维度。
  • 动态 DNS 服务
  • 服务及其元数据管理

Nacos 官网文档:

https://nacos.io/zh-cn/docs/quick-start.html

Nacos 部署:

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

  • Linux/Unix/Mac:sh startup.sh -m standalone
  • Windows:cmd startup.cmd -m standalone

nacos的启动端口为8848,在启动时要保证端口不被占用,启动成功,在浏览器上访问:http://localhost:8848/nacos,默认的登陆用户名/密码为nacos

Nacos 可持久化配置:

  • 找到conf目录下sql脚本,把脚本导入mysql数据库中

  • 编辑application.properties,添加如下代码
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=nacos
db.password=nacos
  • 在配置管理配置列表中添加nacos配置

  • 查看config_info是否已经持久化到数据库中

使用Nacos服务注册和发现

服务注册和发现是微服务治理的根基,服务注册和发现组件是整个微服务系统的灵魂,选择合适的服务注册和发现组件至关重要,目前主流的服务注册和发现组件有Consul、Eureka、Etcd等。 随着Eureka的闭源,Spring cloud netflix-oss组件大规模的进入到了维护期,不再提供新功能,spring cloud alibaba受到开源社区的大力拥护。

服务注册

使用两个服务注册到Nacos上,分别为nacos-provider和nacos-consumer。

服务提供者nacos-provider

1. 添加项目依赖

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
			<version>0.9.0.RELEASE</version>
		</dependency>

2. 在application.yml配置nacos服务地址

spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848

3. 在springboot启动文件中添加@EnableDiscoveryClient注解

4. 在nacos-provider提供个API服务

    @GetMapping("/hi")
    public String sayHello(@RequestParam String name){
        return name;
    }

5. 启动服务,可以发现nacos-provider已经向nacos-server注册

服务消费者nacos-consumer

nacos作为服务注册和发现组件时,在进行服务消费,选择Feign

1. 添加Feign依赖

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
			<version>2.1.1.RELEASE</version>
		</dependency>

3. 在springboot启动文件中添加@EnableDiscoveryClient注解

@EnableDiscoveryClient
@EnableFeignClients

4. 添加配置

spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: 31398485-c414-45d1-9f0c-426011114fa5

5. 写一个FeignClient,调用nacos-provider的服务

@Component
@FeignClient("nacos-provider")
public interface ProviderClient {

    @GetMapping("/hi")
    String sayHello(@RequestParam String name);
}

6. 消费api服务

@RestController
@Slf4j
public class ConsumerController {

    @Autowired
    private ProviderClient providerClient;

    @GetMapping("/consumer")
    public String sayHello(@RequestParam String name){
        return providerClient.sayHello(name);
    }
}

在浏览器上访问http://localhost:9999/consumer?name=ccc

,调用成功

深入思考

如果之前已经用过Spring Cloud的读者,肯定会这样的感受:不论我用的是RestTempalte也好、还是用的WebClient也好,还是用的Feign也好,似乎跟我用不用Nacos没啥关系?我们在之前介绍Eureka和Consul的时候,也都是用同样的方法来实现服务调用的,不是吗?

确实是这样,对于Spring Cloud老手来说,就算我们更换了Nacos作为新的服务注册中心,其实对于我们应用层面的代码是没有影响的。那么为什么Spring Cloud可以带给我们这样的完美编码体验呢?实际上,这完全归功于Spring Cloud Common的封装,由于在服务注册与发现、客户端负载均衡等方面都做了很好的抽象,而上层应用方面依赖的都是这些抽象接口,而非针对某个具体中间件的实现。所以,在Spring Cloud中,我们可以很方便的去切换服务治理方面的中间件。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://xianyum.cn/archives/nacos-1

Buy me a cup of coffee ☕.