SpringCloud中怎么使用Ribbon和RestTemplate实现服务调用和负载平衡
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章给大家分享的是有关SpringCloud中怎么使用Ribbon和RestTemplate实现服务调用和负载平衡的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Spri
千家信息网最后更新 2025年11月11日SpringCloud中怎么使用Ribbon和RestTemplate实现服务调用和负载平衡
这篇文章给大家分享的是有关SpringCloud中怎么使用Ribbon和RestTemplate实现服务调用和负载平衡的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
SpringCloud 是目前微服务架构领域的翘楚,备受开发者和企业的青睐。
文件目录结构
文件目录结构很重要,特别注意的是rule文件要放在主启动类上一级位置,才能够扫描。
写pom
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.cloud spring-cloud-starter-netflix-eureka-client 因为eureka的依赖已经整合了ribbon的依赖,所以不用额外引入新的东西。
改yml
server: port: 80spring: application: name: cloud-book-consumereureka: client: register-with-eureka: false fetch-registry: true service-url: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
主启动
@SpringBootApplication@EnableEurekaClient@RibbonClient(name = "CLOUD-BOOK-SERVICE", configuration = LoadBalanceRule.class) //更换轮询算法public class RestTemplateMain80 { public static void main(String[] args) { SpringApplication.run(RestTemplateMain80.class,args); }}业务逻辑
rules层
在图示文件目录下新建LoadBalanceRule.class,用于更换负载均衡算法。
@Configurationpublic class LoadBalanceRule { @Bean public IRule iRule() { // 定义为随机 return new RandomRule(); }}config层
开启restTemplate负载均衡
在config文件夹下创建LoadBalanceConfig.class
@Configurationpublic class LoadBalanceConfig { @Bean @LoadBalanced //开启负载均衡 public RestTemplate getReatTemplate(){ return new RestTemplate(); }}controller层
新建BookController.class
写业务代码
@RestController@Slf4jpublic class BookController { @Resource private RestTemplate restTemplate; public static final String PAYMENT_URL = "http://CLOUD-BOOK-SERVICE"; @GetMapping(value = "restTemplate/book/getAllBooks")//只要json数据时 public CommonResult getAllBooks(){ return restTemplate.getForObject(PAYMENT_URL+"/book/getAllBooks",CommonResult.class); } @GetMapping("restTemplate/book/getAllBooks2") //需要知道更多数据时,使用getForEntity方法 public CommonResult getAllBooks2(){ ResponseEntity resultResponseEntit = restTemplate.getForEntity(PAYMENT_URL+"/book/getAllBooks",CommonResult.class); if (resultResponseEntit.getStatusCode().is2xxSuccessful()){ log.info(resultResponseEntit.getStatusCode()+" "+resultResponseEntit.getHeaders()); return resultResponseEntit.getBody(); }else { return new CommonResult<>(444,"操作失败"); } } @GetMapping(value = "restTemplate/book/index") public String index() { return restTemplate.getForObject(PAYMENT_URL+"/book/index",String.class); }} 使用restTemplate+Ribboin实现服务调用和负载均衡完成。
手写Ribbon负载均衡算法 lb层
1.新建LoadBalancer接口,添加代码
public interface LoadBalancer { ServiceInstance instances(List serviceInstances);} 2.新建实现类MyLB
@Componentpublic class MyLB implements LoadBalancer { private AtomicInteger atomicInteger = new AtomicInteger(0); //求第几次访问 自旋锁思想 public final int getAndIncrement(){ int current; int next; do { current = this.atomicInteger.get(); next = current >=2147483647 ? 0 : current+1; }while(!this.atomicInteger.compareAndSet(current,next)); System.out.println("***第几次访问next->"+next); return next; } //负载均衡算法,实现roundRobin算法 @Override public ServiceInstance instances(List serviceInstances) { int index = getAndIncrement() % serviceInstances.size(); return serviceInstances.get(index); }} 修改BookController
@RestController@Slf4jpublic class BookController { @Resource private RestTemplate restTemplate; @Resource private LoadBalancer loadBalancer; @Resource private DiscoveryClient discoveryClient; public static final String PAYMENT_URL = "http://CLOUD-BOOK-SERVICE"; @GetMapping(value = "restTemplate/book/getAllBooks")//只要json数据时 public CommonResult getAllBooks(){ List instances = discoveryClient.getInstances("CLOUD-BOOK-SERVICE"); if (instances == null || instances.size() <= 0){ return null; } ServiceInstance serviceInstance = loadBalancer.instances(instances); URI uri = serviceInstance.getUri(); return restTemplate.getForObject(uri+"/book/getAllBooks",CommonResult.class); } @GetMapping(value = "restTemplate/book/index") public String index() { List instances = discoveryClient.getInstances("CLOUD-BOOK-SERVICE"); if (instances == null || instances.size() <= 0){ return null; } ServiceInstance serviceInstance = loadBalancer.instances(instances); URI uri = serviceInstance.getUri(); return restTemplate.getForObject(uri+"/book/index",String.class); }} 修改文件注解
删去主启动类的更换负载均衡算法注解
@RibbonClient(name = "CLOUD-BOOK-SERVICE", configuration = LoadBalanceRule.class)
删去LoadBalanceConfig中开启负载均衡算法注解
@LoadBalanced
手写Ribbon算法并使用完成
感谢各位的阅读!关于"SpringCloud中怎么使用Ribbon和RestTemplate实现服务调用和负载平衡"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
均衡
算法
文件
服务
数据
更多
注解
目录
业务
代码
内容
篇文章
结构
不错
实用
重要
不用
东西
企业
位置
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发人员配比
产品分类管理系统数据库怎么搭建
底层数据库被覆盖掉
一年级网络安全法小报
长沙网律互联网科技有限公司
关于宣传网络安全的知识
怎么对sql数据库的表复制
赠品管理系统数据库表
数据库字段是否为空
服务器硬盘供电线路
数据库系统工程师有什么工作
数据库原理与应用教程课本pdf
张家界管理软件开发
数据库比网页制作难吗
数据库asm模式
web项目连接数据库需要接口吗
入侵移动公司数据库
大连警官学院网络安全与执法
不能下载服务器400
列举常见网络安全问题有哪些
倒数计时器软件开发
网络安全情感对抗
维护网络安全的人都不是局外人
连云港雷战网络技术
携程软件开发工程师
网络安全需要什么职业证书
ftp服务器创建设置
数据库initicap
腾讯云服务器可以装模拟器吗
掌上网关服务器地址怎么设置