需求:需要在@Async注解的方法中调用openfeign接口
解决方法:
方案1:(这里举例controller调用service异步方法)
调用时传递 RequestAttributes 对象,在异步方法中进行设置
// Controller
@PostMapping("publish")
@Operation(summary = "发布", description = "发布项目(某个版本)")
public Result<String> publish(@Valid @RequestBody AddPublishVO addPublishVO){
publishService.publish(addPublishVO, SecurityContextHolder.getContext(), RequestContextHolder.getRequestAttributes());
return Result.success("success", null);
}
// ServiceImpl
@Async
@Override
public void publish(AddPublishVO addPublishVO, SecurityContext securityContext, RequestAttributes requestAttributes) {
// ...
RequestContextHolder.setRequestAttributes(requestAttributes);
Result pubRes = resMarketService.servicePublish(resourceMarket);
}
// FeignClient
@PostMapping("resource/market/publish/service")
@Operation(summary = "应用服务发布", description = "发布应用服务到资源市场")
Result<String> servicePublish(@Valid @RequestBody ResourceMarket resourceMarket);
方案2:
使用AsyncFeign,待完善…