up:: 利用Ribbon实现负载均衡
说明: 本来只是用户服务的问题,最后请求全部积压住,系统就会崩溃,导致其它所有服务都不可用,也不利于维护
假如用户服务出问题了,我们不希望让整个系统都崩溃掉,那我们就可以采取一些降级的手段,这样的话呢,虽然不能够返回正确的数据,但是至少能够保证有个返回能够让这个请求的得到处理,不至于说让大家排队排的越来越长,那就像我们这边一样,假设我的用户服务是可以降级的,我们返回的,那是一个默认的用户,这个用户里面的没有订单就是相当于是没有登录的一个情况,虽然我们没有办法获取到用户的信息,但是知道你能够保证商品可以正常浏览,所以这个它主要不是起到一个正向的作用,而是在发生问题的时候呢,作为保护伞的存在,保证这个错误不会扩散开来,这就是它的一个核心的作用。
编码引入
除了正常的加依赖,加配置,加注解外,我们需要引入一个断路的类,出问题时就访问这个类,作为备用。。。
那我们在哪个模块添加断路嘞?price模块无法保证list模块是否正常启用,所以我们给price添加上断路类,让其调用list失败时调用这个类。。。
引入依赖
添加配置
启动类加注解
调用错误时选择断路类
新建断路类,实现接口
说明: 这里使用了@component注解,请参考复习@Component注解
@Controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层
@Service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理
@Repository(实现dao访问) 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件
@Component (把普通pojo实例化到spring容器中,相当于配置文件中的 )
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。 注意: 这个注解是注册到spring容器的意思,默认走的是无参构造,你加了有参构造,无参构造就没了,需要你显示声明无参;如果你要注册带参数的bean用configuration注解加bean注解来实现
@Primary注解
上面有误,应该是选择courselist,因为两个类继承courseListClient接口,有两个courselist方法,忘记的回头看看代码。。。
如果向消除爆红该怎么办? 使用@Primary注解,表示默认选择哪个类