当前位置: 首页 > news >正文

springcloud学习第三篇

一、客户端负载均衡组件Ribbon

1.添加依赖

<!-- 添加ribbon 依赖 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

2.添加配置类

@Configuration
public class MyConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}

3.使用

@RestController
public class Controller {@Autowiredprivate RestTemplate restTemplate;public string function() {ResponseEntity responseEntity = restTemplate.getForEntity("http://service-name/other/interface");}
}

4.常见负载均衡策略

默认轮询

4.1.随机

@Configuration
public class MyConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}/*** 随机算法的负载均衡* @return 结果*/@Beanpublic IRule MyRule(){return new RandomRule();}
}

4.2.自定义

import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.Server;
import java.util.List;
import java.util.Random;public class CustomRule extends AbstractLoadBalancerRule {@Overridepublic Server choose(Object key) {// 获取所有可达的服务实例List<Server> reachableServers = getLoadBalancer().getReachableServers();if (reachableServers.isEmpty()) {return null;}// 示例:自定义过滤逻辑 - 只选择端口为 8081 的实例List<Server> filteredServers = reachableServers.stream().filter(server -> server.getPort() == 8081).collect(Collectors.toList());if (filteredServers.isEmpty()) {// 回退到随机选择return new Random().nextInt(reachableServers.size());}// 从过滤后的列表中选择return filteredServers.get(new Random().nextInt(filteredServers.size()));}
}

5.缺点

参数需要拼接到url上面

二、客户端负载均衡组件Feign

1.添加依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.开启openFeign

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients(basePackages = "com.jhk")
public class AppUserApplication {public static void main(String[] args) {SpringApplication.run(AppUserApplication.class, args);}
}

3.使用

// 调用其他服务
@FeignClient(name="service-name")
public interface serviceApi{@RequestMapping("/getData")String getData();
}

三、Feign源码

EnableFeignClients
org.springframework.cloud.openfeign.EnableFeignClients>org.springframework.cloud.openfeign.FeignClientsRegistrar # @Import({FeignClientsRegistrar.class}) 通过import注解方式加载FeignClientsRegistrar到容器>org.springframework.cloud.openfeign.FeignClientsRegistrar#registerBeanDefinitions # 将Bean 注册到 FeignClientsRegistrar>org.springframework.cloud.openfeign.FeignClientsRegistrar#registerFeignClients>org.springframework.cloud.openfeign.FeignClientsRegistrar#registerClientConfiguration # 扫描EnableFeignClients标签中的配置信息并注册>org.springframework.cloud.openfeign.FeignClientsRegistrar#registerFeignClient # 扫描所有@FeignClient注解的类注入spring容器>org.springframework.cloud.openfeign.FeignClientFactoryBean # 接口的代理Bean>org.springframework.cloud.openfeign.FeignClientFactoryBean#getObject>org.springframework.cloud.openfeign.FeignClientFactoryBean#getTarget>org.springframework.cloud.openfeign.FeignClientFactoryBean#loadBalance # 如果feignClient中没有url属性,会调用loadBalance完成自动负载调用>org.springframework.beans.factory.support.BeanDefinitionBuilder#genericBeanDefinition(java.lang.Class<?>) # 创建每个feignClient接口的代理Bean>org.springframework.beans.factory.support.BeanDefinitionReaderUtils#registerBeanDefinition # 注册到bena容器中

本文来自博客园,作者:TheLifelongLearner,转载请注明原文链接:https://www.cnblogs.com/The-Lifelong-Learner/p/20490144

http://www.zskr.cn/news/1513745.html

相关文章:

  • 自组网照明节能率最高的厂家2026推荐 - 品牌排行榜
  • 家的排插和公牛排插哪个质量更好?2026年对比参考 - 品牌排行榜
  • 一文读懂AI智能体:知识库如何支撑售前售后全场景服务
  • 2026苏州调查服务公司推荐及行业选择指南 - 品牌排行榜
  • 从调制星座图到误码率:手把手用Python仿真ASK/FSK/PSK,直观理解SNR与BER的关系
  • 苏州诚信的相城装修公司排行2026年口碑推荐 - 品牌排行榜
  • i.MX233 ARM9 SoC高集成度设计解析与嵌入式系统实战指南
  • 2026乐山跷脚牛肉店实测指南:本地人反复光顾的7家老店在哪里? - 优质品牌商家
  • 2026年全自动咖啡机推荐:多场景适用机型解析 - 品牌排行榜
  • 2026杭州中小企业开发公司排名:为什么场景落地比单纯看大厂更重要
  • 从‘最优点’到MATLAB代码:深入浅出图解高斯求积公式的构造与原理
  • 3大核心功能:Snap Hutao如何让您的原神游戏体验提升300%
  • 2026杭州GEO公司排名:AI搜索优化、官网承接、内容矩阵十大场景测评
  • 数据驱动决策:Snap Hutao重构原神玩家体验的智能工具箱
  • Xbox手柄冲动触发器完整解决方案:X1nput一键解锁专业震动体验
  • 从Betaflight到Ardupilot:为什么ChibiOS成了AT32芯片移植的‘拦路虎’?
  • 物联网MCU低功耗与硬件安全设计:以LPC540xx系列为例的实战解析
  • 免费开源的原神终极工具箱:如何用Snap Hutao提升你的游戏体验
  • Agent 自我反思:让 AI 检查自己的输出
  • Resemble Enhance:用AI魔法让你的录音焕然一新
  • Kinetis KL4x MCU低功耗设计:从Cortex-M0+内核到段码LCD与USB OTG应用
  • 别再傻傻转码了!ZLMediaKit转流协议相同时的‘零拷贝’优化,性能提升实测
  • 别再只记结论了!用一行代码可视化model.eval()和torch.no_grad()对Dropout/BatchNorm的影响
  • SQL语句同步练习题2(含答案)
  • 2026苏州GEO代理源头厂家排行:技术型品牌、系统能力与加盟支持对比
  • 如何在Maya中搭建你的专属动画资源库?
  • 2026年聊城刑事辩护律师推荐怎么选?5个实战维度帮你做判断 - 本地品牌推荐
  • STP根桥和VRRP Master不一致?一次抓包带你看清网络绕行的真相
  • 贪心算法学习(共12题) :1.柠檬水找零、2.将数组和减半的最少操作次数
  • S32K3 eMIOS的Counter Bus机制详解:如何像搭积木一样组合定时器功能?