servicecomb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "bismy" <bi...@qq.com>
Subject 关于java-chassis的Invocation实现缺陷的讨论
Date Wed, 14 Mar 2018 02:33:23 GMT
目前在分析如下业务场景。
场景1:----------
Provider:定义一个借口
@GetMapping
public demo.Foo doSomething(demo.Bar request)
Consumer: 使用RestTemplate调用接口:
restTempalte.getForObject(url, otherDemo.Foo.class)


java-chassis要求Foo的package名字完全一样。


场景2:-------------
同样是上面的代码。 Spring MVC支持GET的query参数映射到Bar的 属性, java-chassis不支持。


满足这些场景,需要在解析网络层的数据到Invocaton的时候(args参数),需要知道接口定义的元数据信息(比如class类型),而这些在契约里面是不能体现的(因为契约和语言无关)




产生这种情况的本质原因是Invocation的args是语言有关的内容。 


建议:


Invocation的args做修改,尽可能体现一种契约描述的中立的数据结构,这个数据结构可以使用类似HttpServletRequest/HttpServletResponse的结构(越贴近契约越好,但要考虑网络层转换和编码层转换的性能)。这样的话网络层到Invocation可以做极小的转换。

编码层可以结合代码的元数据和Invocation的的契约元数据将Invocation转换为args。



由于这个涉及到兼容性问题,针对上面的场景和实现优化, 大家有什么建议?
Mime
  • Unnamed multipart/alternative (inline, 8-Bit, 0 bytes)
View raw message