nacos&ribbon
2021/7/12 8:05:47
本文主要是介绍nacos&ribbon,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
整合nacos
先整合spring cloud alibaba
<dependencyManagement> <dependencies> <!-- 整合spring cloud--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> <!-- 整合spring cloud alibaba--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>0.9.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
导入nacos
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
不需写注解,配置好配置文件
spring cloud: nacos: discovery: server-addr: 127.0.0.1:8848 cluster-name: BJ #集群名称 application: name: content-center #服务名称
整合ribbon
依赖已经在nacos中一起导入了
在启动类中restTemplate,加上注解
@LoadBalanced//为restTemplate整合Ribbon
配置负载均衡规则
在包外面定义ribbon所使用的规则
在包内运用该规则
@RibbonClient(name = "user-center",configuration = RibbonConfiguration.class)//单独配置
@RibbonClients(defaultConfiguration = RibbonConfiguration.class)//全局配置
建议在配置文件中直接定义规则
#指定该服务用到RandomRule规则 #user-center: # ribbon: # NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
饥饿加载:减少第一次访问的时间
#指定该服务开启饥饿加载 ribbon: eager-load: clients: user-center # 后面可用逗号分隔为那些服务进行饥饿加载,解决首次加载过慢:user-center,user-center2,user-center3..... enabled: true
以下规则直接在包外配置文件RibbonConfiguration中配置调用
nacos搭配ribbon调用权重大的服务
package com.itmuch.usercenter.configuretion; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.*; import com.netflix.ribbon.proxy.annotation.Var; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.alibaba.nacos.ribbon.NacosServer; @Slf4j public class NacosWeightedRule extends AbstractLoadBalancerRule { @Autowired private NacosDiscoveryProperties nacosDiscoveryProperties; @Override public void initWithNiwsConfig(IClientConfig iClientConfig) { //读取配置文件并初始化NacosWeightedRule //暂时用不到,robbon里面的规则这个也都用不到 } @Override public Server choose(Object o) { try { //ribbon的入口,需要用到getname,所以用BaseLoadBalancer强转一下 BaseLoadBalancer loadBalancer = (BaseLoadBalancer) this.getLoadBalancer(); // log.info("lb:{}",loadBalancer); String name = loadBalancer.getName(); //实现负载均衡算法 NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();//拿到服务发现的相关API //nacos client自动通过基于权重的负载均衡算法,给我们一个实例 Instance instance = namingService.selectOneHealthyInstance(name); log.info("选择的实例是:port:{},instance:{}",instance.getPort(),instance); return new NacosServer(instance); } catch (NacosException e) { return null; } } } //public class NacosWeightedRule implements IRule { // @Override // public Server choose(Object o) { // return null; // } // // @Override // public void setLoadBalancer(ILoadBalancer iLoadBalancer) { // // } // // @Override // public ILoadBalancer getLoadBalancer() { // return null; // }
nacos调用不同集群下的服务
package com.itmuch.usercenter.configuretion; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.NamingService; import com.alibaba.nacos.api.naming.pojo.Instance; import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.*; import com.netflix.ribbon.proxy.annotation.Var; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.alibaba.nacos.ribbon.NacosServer; @Slf4j public class NacosWeightedRule extends AbstractLoadBalancerRule { @Autowired private NacosDiscoveryProperties nacosDiscoveryProperties; @Override public void initWithNiwsConfig(IClientConfig iClientConfig) { //读取配置文件并初始化NacosWeightedRule //暂时用不到,robbon里面的规则这个也都用不到 } @Override public Server choose(Object o) { try { //ribbon的入口,需要用到getname,所以用BaseLoadBalancer强转一下 BaseLoadBalancer loadBalancer = (BaseLoadBalancer) this.getLoadBalancer(); // log.info("lb:{}",loadBalancer); String name = loadBalancer.getName(); //实现负载均衡算法 NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();//拿到服务发现的相关API //nacos client自动通过基于权重的负载均衡算法,给我们一个实例 Instance instance = namingService.selectOneHealthyInstance(name); log.info("选择的实例是:port:{},instance:{}",instance.getPort(),instance); return new NacosServer(instance); } catch (NacosException e) { return null; } } } //public class NacosWeightedRule implements IRule { // @Override // public Server choose(Object o) { // return null; // } // // @Override // public void setLoadBalancer(ILoadBalancer iLoadBalancer) { // // } // // @Override // public ILoadBalancer getLoadBalancer() { // return null; // }
这篇关于nacos&ribbon的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-23DevExpress 怎么实现右键菜单(Context Menu)显示中文?-icode9专业技术文章分享
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享
- 2024-12-22el-tabs 组件只被引用了一次,但有时会渲染两次是什么原因?-icode9专业技术文章分享
- 2024-12-22wordpress有哪些好的安全插件?-icode9专业技术文章分享
- 2024-12-22wordpress如何查看系统有哪些cron任务?-icode9专业技术文章分享
- 2024-12-21Svg Sprite Icon教程:轻松入门与应用指南
- 2024-12-20Excel数据导出实战:新手必学的简单教程
- 2024-12-20RBAC的权限实战:新手入门教程
- 2024-12-20Svg Sprite Icon实战:从入门到上手的全面指南
- 2024-12-20LCD1602显示模块详解