服务注册与发现(nacos)

Nacos简介

什么是Nacos?

  • 定义:Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的服务发现与配置管理平台。

  • 核心功能:

    • 服务发现:管理微服务实例的注册与发现。
    • 动态配置:实时更新应用配置,无需重启服务。
    • 服务健康监测:自动检测服务健康状态,剔除故障节点。

为什么选择Nacos?

特性 Nacos Eureka Consul
配置管理 ✔️ 支持动态配置 ❌ 仅服务发现 ✔️ 需额外组件
健康检查 ✔️ TCP/HTTP/MySQL等多协议 ✔️ HTTP心跳 ✔️ 多种检查方式
易用性 ✔️ 中文文档友好,集成Spring Cloud Alibaba ✔️ 简单 ❌ 复杂

nacos安装启动

我这里只讲在 windows 下的安装,linux的部署就自行下来了解

nacos官网

自行前往官网下载 zip 压缩包即可,选择 2.x 版本,自行解压到一个目录就是安装完成了

来到你的安装目录下的 bin 目录里面打开 cmd

输入启动命令:

cmd 复制代码
startup.cmd -m standalone

启动之后在浏览器访问,默认账号:nacos,密码:nacos(是否需要看你的配置,如果没有就不管)

http 复制代码
http://localhost:8848/nacos

到这里安装就算完成了

服务注册

操作步骤:

  1. 依赖配置

    版本根据你的项目管理自行选择合适的(后面的也一样)

    xml 复制代码
    <dependency>
    	<groupId>com.alibaba.cloud</groupId>
    	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    	<version>2023.0.1.0</version>
    </dependency>
  2. 填写配置文件

yaml 复制代码
spring:
  application:
    name: small-order # 应用名称,会在 nacos 中显示
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 # nacos 地址
  1. 启动服务

验证注册结果

  • Nacos控制台服务管理服务列表 ➔ 查看small-order实例。

启动我们的springboot程序就可以在服务管理中看到我们注册的服务了,服务名称就是配置文件里面的名称

服务消费者发现与调用

我这里使用 springboot 的单元测试进行演示,大家导入相关的依赖就可以了

我这里多注册了一个服务small-product到了nacos中,你可以不注册,只要nacos有一个服务就可以

具体步骤:

  1. 开启服务发现功能

在springboot启动类上加上@EnableDiscoveryClient 注解

java 复制代码
@EnableDiscoveryClient // 开启服务发现功能
@SpringBootApplication
public class ProductApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProductApplication.class, args);
    }
}
  1. 注入相关的bean
java 复制代码
@Autowired
DiscoveryClient discoveryClient;
// 二选一即可,都是一样的
@Autowired
NacosServiceDiscovery nacosServiceDiscovery;

注意要在 springboot 的环境使用,这两个bean的功能都是相同的,DiscoveryClient 是spring的规范,使用其他的注册中心也可以使用,而 NacosServiceDiscovery是nacos才可以使用的

  1. 使用

我直接给出了测试类的代码,通过第二步注入的 bean 可以获取到已经向nacos注册了的服务的信息,在调用其他服务的时候,会使用到这些信息。

java 复制代码
@SpringBootTest
public class DiscoveryTest {

    @Autowired
    DiscoveryClient discoveryClient;

    @Autowired
    NacosServiceDiscovery nacosServiceDiscovery;

    @Test
    void discoveryClientTest() {
        for (String service : discoveryClient.getServices()) {
            System.out.println("service = " + service);
            // 获取ip 和端口
            discoveryClient.getInstances(service).forEach(instance -> {
                System.out.println("host = " + instance.getHost());
                System.out.println("port = " + instance.getPort());
            });
        }
    }

}

运行截图:

配置中心

具体步骤:

  1. 添加依赖
xml 复制代码
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
	<version>2023.0.1.0</version>
</dependency>
  1. 修改配置文件
  • Data ID 格式:

    bash 复制代码
    ${spring.application.name}-${spring.profiles.active}.${file-extension}
    • 示例:user-service-dev.yaml

    我这里就不遵守了

yaml 复制代码
spring:
  application:
    name: small-product # 应用名称,会在 nacos 中显示
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 # nacos 地址
  config:
    import: nacos:sall-product.yaml # 新添加的配置

nacos:sall-product.yaml冒号后面的是在nacos中创见的Data Id,如图:

创建好记得发布

  1. 重启服务,让配置生效
  2. 运行查看结果

可以在nacos中修改配置文件的信息,不用重启服务也能完成配置的更新。

java 复制代码
@SpringBootTest
public class DiscoveryTest {

    @Value("${small.name}")
    String name;
    @Value("${small.age}")
    Integer age;

    @Test
    void Test() {
        System.out.println("name:" + name + ",age:" + age);
    }
}
相关推荐
threerocks16 分钟前
AI 原生软件开发生命周期手册 - 如何借助 AI,逐阶段改造软件开发生命周期
前端·javascript·后端
JavaPub-rodert23 分钟前
王仕宇在 Go Context 如何解决协程泄漏与超时控制
开发语言·后端·golang·iphone·javapub·王仕宇
深漂的华哥1 小时前
Ruoyi-Plus前后端分离场景下,数据加密传输
java·spring boot·后端·开源·maven·ruoyi
why技术2 小时前
eli5,我觉得这个全网在吹的技能,使用体验真的很一般啊。
前端·人工智能·后端
学习星球2 小时前
Qwik 框架入门实战:从开源项目 Qwik City 开始,用可恢复性替代水合
后端·前端框架·开源·c5全栈
IT_陈寒4 小时前
被Java的final坑惨了,这些细节你可能也忽略了
前端·人工智能·后端
Zadig5 小时前
企业 Agent 总烂在 Demo 里?Zadig 工作流 AI 任务给了一条路
后端·devops
Zadig5 小时前
告别"人肉扛雷":Zadig 用 AI 接管发布前最脏最累的 15 分钟
后端·aiops
Nturmoils5 小时前
向量数据库不该成为新孤岛:KingbaseES 多模融合架构如何减少数据搬运
后端
一座古城5 小时前
Claude Code 架构源码解析:AI 应用开发的范式跃迁
前端·后端