RocketMQ高并发项目——Hystrix断路器之降级、限流、批量请求合并

       在微服务架构中,我们将系统分成了一个一个单元,各个单元应该通过服务注册与订阅的方式进行一个相互依赖,每一个单元在不同的进程中去运行,依赖通过远程调用的方式运行,这样就会产生一些问题,比如网络延迟、自身系统故障、请求急剧增加导致任务挤压、线程资源无法释放,这些很可能会导致系统瘫痪,甚至影响到一些核心业务。

 

一.   降级

 

我们具体来实现下:

在父工程RocketParent的pom文件中添加hystrix的版本号

我们首先在order服务的pom文件中添加下面三个jar包

然后再config包下建立一hystrix包,在包内编写一个HystrixConfig类

然后我们再web包下建立一个OrderController:

package com.yy.order.web;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class OrderController {


    //	超时降级
	@HystrixCommand(
				commandKey = "createOrder",
				commandProperties = {
						@HystrixProperty(name="execution.timeout.enabled", value="true"),
						@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds", value="3000"),
				},
				fallbackMethod = "createOrderFallbackMethod4Timeout"   //降级调用的方法名
			)
    @RequestMapping("/createOrder")
    public String createOrder(@RequestParam("cityId")String cityId,
                              @RequestParam("platformId")String platformId,
                              @RequestParam("userId")String userId,
                              @RequestParam("supplierId")String supplierId,
                              @RequestParam("goodsId")String goodsId) throws Exception{
        
        return "下单成功!";
    }

    //降级的方法一定要与原来的方法一模一样(返回值,函数参数,),除了方法名
    public String createOrderFallbackMethod4Timeout(@RequestParam("cityId")String cityId,
                                                    @RequestParam("platformId")String platformId,
                                                    @RequestParam("userId")String userId,
                                                    @RequestParam("suppliedId")String suppliedId,
                                                    @RequestParam("goodsId")String goodsId) throws Exception {
        System.err.println("-------超时降级策略执行------------");
        return "hysrtix timeout !";
    }
}

然后我们就可以测试了:

我们可以看到,熔断器还没发挥作用,现在我们在原函数createOrder中阻塞五秒种

我们再测试,我们就可以看到方法降级了

 

 

二.   限流

和降级一样,我们只需要修改@HystrixCommand标签里面的内容即可(我们这里使用的线程池限流方式,我们还有信号量方式)

使用Jmeter测试:(关于jmeter的使用可以看这篇博文:https://blog.csdn.net/u012111923/article/details/80705141

可以看到当没满足threadPoolProperties里面的条件时,就降级了

 

三.   批量请求合并

上面配置的意思是:单个请求延迟200秒,200秒后将50个或少于50个请求合并发送(超过的部分下次合并发送)

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值