SpringCloud中怎么使用Ribbon和RestTemplate实现服务调用和负载平衡
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关SpringCloud中怎么使用Ribbon和RestTemplate实现服务调用和负载平衡的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Spri
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
瑰夏咖啡
南京欣网互联网络科技有限公司
山东特亿宝互联网科技有限公司
互联网科技工作委员会副主任毛军
互联网和科技技术
互联网科技深圳
美国互联网科技巨头监管
金融科技 互联网金融
华宇互联网科技
云电互联网科技
汇久创客互联网科技
华中科技大学互联网的牛人
互联网企业科技类企业如何做账
厦门江牛科技互联网
互联网相关科技技术
国产互联网科技公司
互联网科技品牌
10位科技互联网大佬
杭州科技互联网公司有哪些
宁波允成互联网科技有限公司
互联网与科技
互联网是不是新科技
河南真二互联网科技有限公司
互联网 科技
科技与互联网发展
互联网医疗科技
科技创新互联网企业
汽车互联网创新科技园
互联网金融科技公司干啥的
互联网公司黑科技创始人