SpringCloud中怎么使用Ribbon和RestTemplate实现服务调用和负载平衡
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章给大家分享的是有关SpringCloud中怎么使用Ribbon和RestTemplate实现服务调用和负载平衡的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Spri
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
数据库实验安全性实验报告
小辣椒软件开发
中国人民大学数据库注销
智能电子软件开发中心
腾讯pg数据库
软件开发 人数6
小服务器 客机3代
数据库服务器安全研究
关于网络安全方面的手抄报
目前全球网络安全
联通网络安全宣传语
宝山区品牌网络技术怎么样
导入unl文件到数据库
服务器起始地址和接收地址
数据库占用的内存
重要时期网络安全保障工作简报
池州物业管理软件开发公司
嘉兴营销网络技术管理系统
金蝶迷你版数据库
武装突袭进服务器无角色
测试面试数据库迁移怎么做
腾讯云服务器打不开易语言
688318是互联网金融科技吗
交通银行西安软件开发工程师
金山区咨询软件开发创新服务
我的世界像素文明社会模拟服务器
网络安全常识2018
中专网络技术题库
苹果怎么下载数据库文件
网络技术与信息安全专业排名