【第5章】Spring Cloud之Nacos服务注册和服务发现

文章目录

  • 前言
  • 一、提供者
    • [1. 引入依赖](#1. 引入依赖)
    • [2.配置 Nacos Server 地址](#2.配置 Nacos Server 地址)
    • [3. 开启服务注册](#3. 开启服务注册)
  • 二、消费者
    • [1. 引入依赖](#1. 引入依赖)
    • [2.配置 Nacos Server 地址](#2.配置 Nacos Server 地址)
    • [3. 开启服务注册](#3. 开启服务注册)
  • 三、服务列表
  • 四、服务发现
    • [1. 获取服务列表](#1. 获取服务列表)
    • [2. 测试](#2. 测试)
      • [2.1 获取所有服务](#2.1 获取所有服务)
      • [2.2 根据服务名获取服务信息](#2.2 根据服务名获取服务信息)
  • 五、更多配置项
  • 总结

前言

本节通过实现一个简单的 echo service 演示如何在您的 Spring Cloud 项目中启用 Nacos 的服务注册和发现功能,如下图示:


一、提供者

1. 引入依赖

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.配置 Nacos Server 地址

${NACOS_SERVER_ADDR}是配置的环境变量

yml 复制代码
server:
  port: 9002
spring:
  application:
    name: provider-service
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_SERVER_ADDR}
        username: nacos
        password: nacos

在使用 Nacos 服务发现和配置功能时,一定要配置 username 和 password 属性,否则会出现用户未找到异常!

3. 开启服务注册

java 复制代码
package org.example.nacos.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosDiscoveryProviderApplication.class, args);
    }

}

二、消费者

1. 引入依赖

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.配置 Nacos Server 地址

yml 复制代码
server:
  port: 9000
spring:
  application:
    name: consumer-service
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_SERVER_ADDR}
        username: nacos
        password: nacos

3. 开启服务注册

bash 复制代码
package org.example.nacos.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosDiscoveryConsumerApplication.class, args);
    }

}

三、服务列表

四、服务发现

1. 获取服务列表

我们在消费者项目中获取nacos中的服务列表,并打印出来。

java 复制代码
package org.example.nacos.consumer.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

/**
 * Create by zjg on 2024/7/15
 */
@RequestMapping("/nacos/")
@RestController
public class NacosDiscoveryController {
    @Autowired
    DiscoveryClient discoveryClient;
    @RequestMapping("discovery")
    public void discovery(){
        List<String> services = discoveryClient.getServices();
        services.forEach(System.out::println);
    }
    @RequestMapping("discovery/instance")
    public void discovery(@RequestParam("serviceId") String serviceId){
        List<ServiceInstance> instances = discoveryClient.getInstances(serviceId);
        instances.forEach(instance->{
            System.out.println(instance.getHost()+":"+instance.getPort());
        });
    }
}

新版本的@RequestParam("serviceId"),用法略有改动,更加规范了,但是没那么灵活对开发者不是很友好!

2. 测试

2.1 获取所有服务

http://localhost:9000/nacos/discovery

bash 复制代码
consumer-service
provider-service

2.2 根据服务名获取服务信息

http://localhost:9000/nacos/discovery/instance?serviceId=provider-service

bash 复制代码
192.168.0.103:9002

五、更多配置项

配置项 key 默认值 说明
服务端地址 spring.cloud.nacos.discovery.server-addr
服务名 spring.cloud.nacos.discovery.service ${spring.application.name} 注册到Nacos上的服务名称,默认值为应用名称
权重 spring.cloud.nacos.discovery.weight 1 取值范围 1 到 100,数值越大,权重越大
网卡名 spring.cloud.nacos.discovery.network-interface 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址
注册的IP地址 spring.cloud.nacos.discovery.ip 优先级最高
注册的IP地址类型 spring.cloud.nacos.discovery.ip-type 双栈地址 可以配置IPv4和IPv6两种类型,如果网卡同类型IP地址存在多个,希望制定特定网段地址,可使用spring.cloud.inetutils.preferred-networks配置筛选地址
注册的端口 spring.cloud.nacos.discovery.port -1 默认情况下不用配置,会自动探测
命名空间 spring.cloud.nacos.discovery.namespace 常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
AccessKey spring.cloud.nacos.discovery.access-key
SecretKey spring.cloud.nacos.discovery.secret-key
Metadata spring.cloud.nacos.discovery.metadata 使用Map格式配置
日志文件名 spring.cloud.nacos.discovery.log-name
集群 spring.cloud.nacos.discovery.cluster-name DEFAULT Nacos集群名称
接入点 spring.cloud.nacos.discovery.endpoint 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
是否集成LoadBalancer spring.cloud.loadbalancer.nacos.enabled false
是否开启Nacos Watch spring.cloud.nacos.discovery.watch.enabled false 可以设置成true来开启 watch
是否启用Nacos spring.cloud.nacos.discovery.enabled true 默认启动,设置为false时会关闭自动向Nacos注册的功能
用户名 spring.cloud.nacos.discovery.username nacos
密码 spring.cloud.nacos.discovery.password nacos

总结

回到顶部
中文文档
官方案例

相关推荐
Java猿_3 小时前
Spring Boot 集成 Sa-Token 实现登录认证与 RBAC 权限控制(实战)
android·spring boot·后端
小王师傅664 小时前
【轻松入门SpringBoot】actuator健康检查(上)
java·spring boot·后端
醒过来摸鱼4 小时前
Java classloader
java·开发语言·python
专注于大数据技术栈4 小时前
java学习--StringBuilder
java·学习
loosenivy4 小时前
企业银行账户归属地查询接口如何用Java调用
java·企业银行账户归属地·企业账户查询接口·企业银行账户查询
IT 行者4 小时前
Spring Security 6.x 迁移到 7.0 的完整步骤
java·spring·oauth2
JIngJaneIL4 小时前
基于java+ vue农产投入线上管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
东东的脑洞5 小时前
【面试突击二】JAVA基础知识-volatile、synchronized与ReentrantLock深度对比
java·面试
川贝枇杷膏cbppg5 小时前
Redis 的 AOF
java·数据库·redis
⑩-5 小时前
SpringCloud-Nacos 配置中心实战
后端·spring·spring cloud