文章目录
- 前言
- 一、提供者
- 1. 引入依赖
- 2.配置 Nacos Server 地址
- 3. 开启服务注册
- 二、消费者
- 1. 引入依赖
- 2.配置 Nacos Server 地址
- 3. 开启服务注册
- 三、服务列表
- 四、服务发现
- 1. 获取服务列表
- 2. 测试
- 2.1 获取所有服务
- 2.2 根据服务名获取服务信息
- 五、更多配置项
- 总结
前言
本节通过实现一个简单的 echo service 演示如何在您的 Spring Cloud 项目中启用 Nacos 的服务注册和发现功能,如下图示:
一、提供者
1. 引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.配置 Nacos Server 地址
${NACOS_SERVER_ADDR}是配置的环境变量
server:port: 9002
spring:application:name: provider-servicecloud:nacos:discovery:server-addr: ${NACOS_SERVER_ADDR}username: nacospassword: nacos
在使用 Nacos 服务发现和配置功能时,一定要配置 username 和 password 属性,否则会出现用户未找到异常!
3. 开启服务注册
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. 引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.配置 Nacos Server 地址
server:port: 9000
spring:application:name: consumer-servicecloud:nacos:discovery:server-addr: ${NACOS_SERVER_ADDR}username: nacospassword: nacos
3. 开启服务注册
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中的服务列表,并打印出来。
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 {@AutowiredDiscoveryClient 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
consumer-service
provider-service
2.2 根据服务名获取服务信息
http://localhost:9000/nacos/discovery/instance?serviceId=provider-service
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 |
总结
回到顶部
中文文档
官方案例