为了利便行使,也提供了注解:
- @Override
- @ControllerLimit
- public BaseResponse<OrderNoResVO> getOrderNoLimit(@RequestBody OrderNoReqVO orderNoReq) {
- BaseResponse<OrderNoResVO> res = new BaseResponse();
- // 营业逻辑
- return res ;
- }
该注解拦截了 http 哀求,会再哀求到达阈值时直接返回。
平凡要领也可行使:
- @CommonLimit
- public void doSomething(){}
会在挪用到达阈值时抛出非常。
为了模仿并发,在 User 应用中开启了 10 个线程挪用 Order(限流次数为5) 接口(也可行使专业的并发测试器材 JMeter 等)。
- @Override
- public BaseResponse<UserResVO> getUserByFeign(@RequestBody UserReqVO userReq) {
- //挪用长途处事
- OrderNoReqVO vo = new OrderNoReqVO();
- vo.setAppId(1L);
- vo.setReqNo(userReq.getReqNo());
- for (int i = 0; i < 10; i++) {
- executorService.execute(new Worker(vo, orderServiceClient));
- }
- UserRes userRes = new UserRes();
- userRes.setUserId(123);
- userRes.setUserName("张三");
- userRes.setReqNo(userReq.getReqNo());
- userRes.setCode(StatusEnum.SUCCESS.getCode());
- userRes.setMessage("乐成");
- return userRes;
- }
- private static class Worker implements Runnable {
- private OrderNoReqVO vo;
- private OrderServiceClient orderServiceClient;
- public Worker(OrderNoReqVO vo, OrderServiceClient orderServiceClient) {
- this.vo = vo;
- this.orderServiceClient = orderServiceClient;
- }
- @Override
- public void run() {
- BaseResponse<OrderNoResVO> orderNo = orderServiceClient.getOrderNoCommonLimit(vo);
- logger.info("长途返回:" + JSON.toJSONString(orderNo));
- }
- }
为了验证漫衍式结果启动了两个 Order 应用。
结果如下:
实现道理
实现道理着实很简朴。既然要到达漫衍式全范围流的结果,那天然必要一个第三方组件来记录哀求的次数。 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|