sofastack / sofa-rpc

SOFARPC is a high-performance, high-extensibility, production-level Java RPC framework.
https://www.sofastack.tech/sofa-rpc/docs/Home
Apache License 2.0
3.81k stars 1.17k forks source link

triple invoke support callback&future #1249

Closed zhenjunMa closed 1 year ago

zhenjunMa commented 1 year ago

背景

目前SOFA-RPC的triple协议不支持callback调用,该RP预期增加该能力

实现思路

整体上希望基于gRPC本身的Observer机制实现,如下:

  1. 用户在使用callback方式时,仍旧按照现有的编程界面,设置callbackhandler且仍然按照同步方法发起调用

  2. 当用户设置callback时,请求会到TripleClientTransport中的asyncSend方法,这里实现方案仿造syncSend方法,把请求交给TripleInvoker的asyncInvoke方法

  3. 在TripleInvoker的asyncInvoke中做了方法切换,比如用户调用的是test(request)方法,这里会转换成调test(request, StreamObserver)方法,然后让StreamObserver的实现是调用用户设置的callbackhandler

其他

请首先评估一下上述实现思路是否合理,如果合适的话再补充测试用例

zhenjunMa commented 1 year ago

@OrezzerO @EvenLjj 有时间帮忙review下哈🙏

codecov[bot] commented 1 year ago

Codecov Report

Merging #1249 (08be3c8) into master (d53562a) will decrease coverage by 0.26%. The diff coverage is 49.51%.

@@             Coverage Diff              @@
##             master    #1249      +/-   ##
============================================
- Coverage     72.21%   71.95%   -0.27%     
+ Complexity      782      780       -2     
============================================
  Files           412      413       +1     
  Lines         17467    17555      +88     
  Branches       2723     2739      +16     
============================================
+ Hits          12614    12631      +17     
- Misses         3466     3531      +65     
- Partials       1387     1393       +6     
Impacted Files Coverage Δ
...sofa/rpc/transport/triple/TripleClientInvoker.java 61.65% <44.00%> (-26.02%) :arrow_down:
.../sofa/rpc/message/triple/TripleResponseFuture.java 50.00% <50.00%> (ø)
...fa/rpc/transport/triple/TripleClientTransport.java 71.66% <72.22%> (+0.79%) :arrow_up:
...java/com/alipay/sofa/rpc/module/LookoutModule.java 52.38% <0.00%> (-33.34%) :arrow_down:
...ipay/sofa/rpc/server/bolt/BoltServerProcessor.java 64.86% <0.00%> (-4.73%) :arrow_down:
...n/java/com/alipay/sofa/rpc/common/SofaConfigs.java 84.90% <0.00%> (-1.89%) :arrow_down:
.../alipay/sofa/rpc/metrics/lookout/RpcLookoutId.java 87.30% <0.00%> (-1.59%) :arrow_down:
...om/alipay/sofa/rpc/server/triple/TripleServer.java 74.86% <0.00%> (-1.07%) :arrow_down:
.../com/alipay/sofa/rpc/context/RpcInvokeContext.java 81.48% <0.00%> (-0.93%) :arrow_down:
...ipay/sofa/rpc/tracer/sofatracer/RpcSofaTracer.java 90.32% <0.00%> (-0.75%) :arrow_down:
... and 3 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.