【第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

总结

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

相关推荐
码爸2 分钟前
java 执行es中的sql
java·sql·elasticsearch
VaporGas15 分钟前
idea集成和使用Git指南
java·git·intellij-idea
阿乾之铭37 分钟前
spring MVC 拦截器
java·spring·mvc
码爸40 分钟前
flink 批量写clickhouse
java·clickhouse·flink
djgxfc42 分钟前
简单了解Maven与安装
java·maven
中文很快乐1 小时前
springboot结合p6spy进行SQL监控
java·数据库·sql
丶白泽1 小时前
重修设计模式-概览
java·设计模式
小电玩1 小时前
谈谈你对Spring的理解
java·数据库·spring
五味香1 小时前
C++学习,动态内存
java·c语言·开发语言·jvm·c++·学习·算法
无名之逆1 小时前
计算机专业的就业方向
java·开发语言·c++·人工智能·git·考研·面试