服务注册与发现(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);
    }
}
相关推荐
KD1 天前
设计模式——责任链模式实战,优雅处理Kafka消息
后端·设计模式·kafka
没逻辑1 天前
gocron - 分布式定时任务管理系统
后端
程序猿DD1 天前
人工智能如何改变 Anthropic 的工作方式
java·后端
桦说编程1 天前
Guava Forwarding系列类详解——装饰器模式实战
java·后端·设计模式
VX:Fegn08951 天前
计算机毕业设计|基于springboot + vue敬老院管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
算法与双吉汉堡1 天前
【短链接项目笔记】Day2 用户注册
java·redis·笔记·后端·spring
Victor3561 天前
Netty(18)Netty的内存模型
后端
Victor3561 天前
Netty(17)Netty如何处理大量的并发连接?
后端
码事漫谈1 天前
C++共享内存小白入门指南
后端