环境信息
Dubbo version: 2.7.8 Operating System version: macos Java version: jdk1.8
步骤重现
对于分层应用而言:
比如在 infrastructure 层做 dubbo 远程调用 在 service 层调用 infrastructure 层 在 controller 层调用 service 层
这种结构的应用如何利用 dubbo 的异步化能力完成改造?
我想达到的效果是在不大改代码的情况下,在 service 层完成异步改造。
比如在 infrastructure 层:
@Component @Slf4j public class ProviderIntegration {
@Reference(check = false, timeout = 3000)
private HelloService helloService;
public String sayHello() {
return helloService.sayHello();
}
}
Service 层:
@Component @Slf4j public class ProviderServiceImpl { @Autowired private ProviderIntegration providerIntergration;
public ApiResponse<String> doSomeThings(){
String result = providerIntergration.sayHello();
return ApiResponse.success(result);
}
}
Controller 层:
@RestController public class ProviderController {
@Autowired
private ProviderServiceImpl providerServiceImpl;
@PostMapping("v1/xxx")
public ApiResponse<String> doSomeThings() {
return providerServiceImpl.doSomeThings();
}
}
infrastructure 层是 rpc 调用,可能被 service 层的多个服务复用,在 service 层组装成相应的功能暴露给 controller 层。
但是按照现有的 dubbo 异步化,我的理解是需要在 infrastructure 层和 service 层同时做改造,工作量较大。我想达到的效果是只在 service 层做改造,利用 dubbo 提供的异步化,将现有的接口修改为异步调用。
原提问者GitHub用户xiaoheng1
由于 Dubbo 提供的 proxy 代理在业务中只能触及到 infrastructure 层,如果 infrastructure 层使用的是同步的方式,我的理解是 service 层的能力 Dubbo 是无法更改的。如果实在想要 service 层进行异步可以考虑对 infrastructure 层的同步接口先进行异步转换,然后后期再改造 infrastructure 层了
原回答者GitHub用户AlbumenJ
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。