我正在考虑在Scala中使用finagle实现基于JSON-RPC的web服务。我试图找出如何最好地构建RPC调用代码(即。获取反序列化的请求并调用适当的方法)。
服务需要能够吐出一个关于所有可能接受的请求及其参数的帮助页面。在Java中,我将简单地使用注释(用于公开和记录函数),然后让RPC服务反射到适当的类上,检测所有公开的方法,然后使用反射的MethodInfo在适当的地方调用函数。
实现类似功能的惯用Scala方法是什么?我是否应该使用消息传递方法(例如。只需将请求对象传递给actor,让它决定是否可以调用它,等等)
我们成功地采用了类似于@Jan上面建议的方法。更具体地说,我们为所有请求对象定义了一个父类,它将期望的返回类型作为类型参数。更进一步,我们通过反射API对象(仅仅是一组请求)来生成协议IDL和序列化绑定。
在未来,Akka的实验类型通道功能可能会帮助解决一些机制问题。