服务注册与发现(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);
    }
}
相关推荐
llz_1122 小时前
web-第二次课后作业
前端·后端·web
红尘散仙8 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记10 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆10 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪10 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball61611 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_25183645711 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao11 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒12 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
ayqy贾杰13 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理