聊聊MySQL主从复制的几种复制方式,SpringCloud系列:4

我们就来试一试吧,继续之前的项目。在user-server中,我们引入Ribbon的依赖spring-cloud-starter-netflix-eureka-server。

然后在RestTemplate对象上标注@LoadBalanced注解。RestTemplate对象用于提供服务间调用的功能,而@LoadBalanced注解则使得RestTemplate具有负载均衡的功能,该注解由Ribbon提供,其实现原理可以概括为下面4个步骤:

(1)Ribbon首先根据其所在Zone优先选择一个负载较少的Eureka服务器。

(2)定期从Eureka服务器更新,并过滤服务实例列表。

(3)根据指定的负载均衡策略,从可用的服务实例列表中选择一个。

(4)然后使用该地址,通过Rest客户端进行服务调用。

默认情况下,客户端负载均衡采用了轮询策略(RoundRobinRule),也就是说Ribbon会交替访问从Eureka中所获取的用户微服务实例。

二、ribbon + RestTemplate演示


可能看到这里,有的人还是疑惑,Ribbon + RestTemplate到底怎么使用,这里我们就来用具体代码演示一下。

在开始代码之前,我们做一个设定,我们给每个用户添加一个属性——喜欢的书籍,即在User实体中,用likes字段记录书籍的id,体现在UserVo中,我们又增加了private List books字段,用于存放书籍信息,通过likes存放的书籍id,我们可以在book-server中查到相对应书籍的信息。

然后我们为UserApi增加了findUserRibbon方法,该方法用于展示Ribbon + RestTemplate的服务间调用。

这个方法,粗略一看,似乎和普通的mvc方法并没有什么不同,但似乎又有点儿不对劲。可能细心的你已经发现了,书籍信息BookVo不是存在于book-server吗,那ribbonService.findByIds(user.getLikes())又是怎么获取到book-server的数据的呢?

可以看到,只需要注入RestTemplate对象,通过RestTemplate提供的api,我们可以调用其他服务的接口,其中http://book-server/book中,我们已经指明我们要调用的是book-server,而不用具体ip地址,并且因为Ribbon,此时的调用具有负载均衡的功能。至于该方法上@HystrixCommand注解,暂时不用关心,我们稍后会说明。而在book-server中,book/ids不过是一个普通的mvc方法。

现在我们分别启动eureka-server、user-server、book-server,为了测试负载均衡,这里我们需要启动至少两个book-server客户端,那怎么启动两个呢,我们可以更改book-server的端口,然后分别打成jar包启动,也可以直接复制项目,更改端口进行启动。

这里我们使用jar包启动,分别准备了端口为18030与18031的jar,启动完成后,在我们的Eureka注册中心,我们可以看到服务已经成功注册到服务列表上了,且book-server有两个服务实例。

接下来我们调用swagger-ui对刚刚的接口进行测试,可以看到接口能够正常返回,并且书籍的信息也可以查询到(需要事先插入关联数据)。

而我们多次调用,也会发现,18030和18031端口的日志输出打印上,他们是交替执行的,这说明我们的负载均衡也起到了作用。我们试着停止其中一个端口,可以发现功能依然不受影响。

但是万一极端情况的出现,多个book-server都挂掉了,那这个时候,因为连接问题,程序必然异常,这或许并不是我们所希望的,于是这是轮到Spring Cloud的另一个组件Hystrix登场了。

三、断路器Hystrix


在微服务架构中,为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

为了解决这个问题,业界提出了断路器模型。

Netflix开源了Hystrix组件,实现了断路器模式,Spring Cloud对这一组件进行了整合,通过该组件,可以为我们解决以下问题:

·对第三方接口/依赖服务潜在的调用失败提供保护和控制机制。

·在分布式系统中隔离资源,降低耦合,防止服务之间相互调用而导致级连失败;

·快速失败及迅速恢复。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

由于篇幅限制,小编在此截出几张知识讲解的图解

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
[外链图片转存中…(img-3zgFU8aw-1713471231305)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值