在SpringCould中通常需要各个模块之间的相互调用实现数据互通和业务逻辑
但是当使用异步标签@Async与@EableAsync的配合使用的时候,在@Async标注的异步方法中调用fegin会自动进入熔断函数。
在网上查阅资料发现@Async的方法不可以调用fegin
当生产者的接口,只是调用另外一个外部接口的作用的时候(即生产者只有你一个消费者),可以将被调用方法打上异步@Async标签,将消费者异步方法标签删除,也可实现异步效果。
我的代码情况如下
调用方:
@Overridepublic void deleteInfoToIm(String ids) throws Exception {String[] idList=ids.split(",");for(String id:idList){Map<String,Object> paramsMap = new LinkedHashMap<String,Object>();paramsMap.put("userId",id);paramsMap.put("ImFlag","4");//调用im接口syncToImApiFeignClient.SyncUserToImApi(paramsMap);}}
@FeignClient(name="${feign.client.XXXXX.name}",fallback= XXXXXFeignClientHystrix.class,path = "${feign.client.XXXX.path}")XXXX
public interface SyncToImApiFeignClient {@PostMapping("/XXXXXCtrl/doOrgSynUpdate")JsonResult SyncOrgToImApi(@RequestBody Map<String, Object> map) throws Exception;@PostMapping("/XXXXXCtrl/doUserSynUpdate")JsonResult SyncUserToImApi(@RequestBody Map<String, Object> map) throws Exception;}
被调用方:
@Async@PostMapping("/doOrgSynUpdate")public JsonResult doOrgSynUpdate(@RequestBody Map<String,Object> params){JsonResult result = null;try {if(AegisCommonUtils.isNull(params.get("orgId"))||AegisCommonUtils.isNull(params.get("ImFlag"))){return JsonResultUtils.getFailInstance("参数错误");}result = XXXXXXService.doOrgSynUpdate(params);} catch (Exception e) {e.printStackTrace();}return result;}