Nacos+Ribbon实现服务注册与发现

发布于:2025-07-22 ⋅ 阅读:(12) ⋅ 点赞:(0)

目录

一、相关文章

二、兼容说明

三、服务注册到Nacos

四、服务发现

五、服务分级存储模型

六、查看集群服务 

七、NacosRule负载均衡


一、相关文章
二、兼容说明
plugins {  
	id 'org.springframework.boot' version '2.3.12.RELEASE'  
	id 'io.spring.dependency-management' version '1.0.11.RELEASE' // 引入dependency-management插件  
}

//JDK版本太高可能和SpringBoot不兼容
JDK11 

sourceCompatibility = 11  
targetCompatibility = 11

runtimeOnly 'mysql:mysql-connector-java'

//mybatis  
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.1'

//mybatis-plus  
implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.2'
三、服务注册到Nacos

1、父工程cloud-demo引入依赖

  • SpringCloud及SpringCloudAlibaba版本需根据SpringBoot版本对照表参照

  • 版本对照表地址:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

  • dependencyManagement引入依赖版本管理包,其管理的依赖引入不需要再指定版本

  • 查看管理依赖版本spring-cloud-dependencies:https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies/Hoxton.SR12

  • 查看管理依赖版本spring-cloud-alibaba-dependencies:https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-dependencies/2.2.10-RC2

dependencyManagement {  
	imports { mavenBom "com.alibaba.cloud:spring-cloud-alibaba-dependencies:2.2.10-RC1" }  
	imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:Hoxton.SR12" }  
}  
  
dependencies {  
	//nacos-discovery  
	implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery'
}

2、修改子工程application.yml文件,注释eureka地址,添加nacos地址

spring:  
	application:  
		name: user-service  
	cloud:  
		nacos:  
		# nacos 服务端地址  
		server-addr: 192.168.10.104:10001  
		discovery:  
			# 命名空间ID,需在注册中心创建再指定
			namespace: 44480e91-8290-43e4-9129-2d2d42ecd30a  
			# 配置集群名称,也就是机房位置,可自定义,如:HZ,杭州  
			cluster-name: SH  
			# 登录nacos
			username: nacos  
			password: nacos
			# 是否是临时实例,临时实例心跳不正常会被剔除,非临时实例则不会被剔除
			ephemeral: false

3、临时实例与非临时实例区别:参考Nacos和Eureka对比-CSDN博客中Nacos与Eureka的区别

 4、非临时实例必须调api才能删除,否则对应工程改为临时实例启动不了

### user-删除nacos注册中心user-service:8083服务  
DELETE http://127.0.0.1:10001/nacos/v2/ns/instance?serviceName=user-service&ip=192.168.10.104&port=8083&namespaceId=44480e91-8290-43e4-9129-2d2d42ecd30a&clusterName=HZ&ephemeral=false&groupName=DEFAULT_GROUP  
Content-Type: application/x-www-form-urlencoded

5、在Nacos服务端创建namespace命名空间

  • namespace用来做环境隔离,如生产环境(prod)、开发环境(dev)

  • 每个namespace都有唯一id

  • 不同namespace下的服务不可见,prod的服务不能请求到dev去 

6、启动多个user-service,参考idea中同服务启动多个-CSDN博客

四、服务发现

1、在OrderApplication类创建RestTemplate

@Bean  
@LoadBalanced  //添加使用负载均衡注解
RestTemplate restTemplate() {  
	return new RestTemplate();  
}

2、服务远程调用

//示例:在order服根据用户ID拉取user服用户信息
@Override  
public Order getOrderById(Long orderId) {  
	//获取订单信息  
	Order order = orderMapper.getOrderById(orderId);  
	  
	//根据订单用户ID获取用户信息,通过host:port拼接请求路径
	//String url = "http://localhost:8083/user/" + order.getUserId();  
	
	//eureka方式:通过user-service服务名拼接请求路径
	String url = "http://user-service/user/" + order.getUserId();  
	
	//执行远程调用
	User user = restTemplate.getForObject(url, User.class);  
	order.setUser(user);  
	  
	return order;  
}
五、服务分级存储模型
# 服务分级存储模型
一级是服务,例如user-service
二级是集群,例如杭州,上海
三级是实例,例如杭州机房的某台部署了user-service的服务器

# 配置集群
spring.cloud.nacos.discovery.cluster-name: HZ

六、查看集群服务 

七、NacosRule负载均衡

1、根据集群负载均衡,优先找自己同集群的服务,注意将user-service权重都设置为1

user-service:  
	ribbon:  
		# nacos负载均衡规则  
		NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

2、根据权重负载均衡(权重值在0-1之间)

实际部署中会出现这样的场景:
服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。

设为0表示后续不会调用,已发生的调用正常执行
设为0.1表示10个请求只有1个请求到8081

同集群两个都为0.1,另一集群为1,设置了同集群优先调用规则,也只调用0.1集群里的服务


网站公告

今日签到

点亮在社区的每一天
去签到