开发者社区 > 云原生 > 正文

利用 dubbo 服务异步化能力完成应用异步调用改造讨论

环境信息

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

展开
收起
大圣东游 2023-05-11 20:06:35 158 0
1 条回答
写回答
取消 提交回答
  • 由于 Dubbo 提供的 proxy 代理在业务中只能触及到 infrastructure 层,如果 infrastructure 层使用的是同步的方式,我的理解是 service 层的能力 Dubbo 是无法更改的。如果实在想要 service 层进行异步可以考虑对 infrastructure 层的同步接口先进行异步转换,然后后期再改造 infrastructure 层了

    原回答者GitHub用户AlbumenJ

    2023-05-12 11:09:17
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
Dubbo开源现状与2.7规划 立即下载
Dubbo分布式服务治理实战 立即下载
《Dubbo 3.0 前瞻》 立即下载