在 Scala 中创建自文档 Actor
我正在考虑使用 finagle 在 Scala 中实现基于 JSON-RPC 的 Web 服务。我正在尝试找出如何最好地构建 RPC 调用代码(即采用反序列化请求并调用适当的方法)。
该服务需要能够输出有关所有可能接受的请求及其参数的帮助页面。在 Java 中,我只需使用注释(公开和记录函数),然后让 RPC 服务反映适当的类,检测所有公开的方法,然后使用反映的 MethodInfo 在适当的情况下调用函数。
实现类似目标的惯用 Scala 方法是什么?我是否应该使用消息传递方法(即,只需将请求对象传递给参与者,让它确定是否可以调用它,等等)
I'm looking at implementing a JSON-RPC based web service in Scala using finagle. I'm trying to work out how best to structure the RPC invocation code (ie. taking the deserialized request and invoking the appropriate method).
The service needs to be able to spit out a help page on all the possible requests accepted and their parameters. In Java, I would simply use annotations (to both expose and document functions) and then have the RPC service reflect on the appropriate classes, detect all exposed methods and then use the reflected MethodInfo's to invoke the functions where appropriate.
What is the idiomatic Scala way to achieve something similar? Should I use a message-passing approach (ie. just pass a request object into an actor, have it determine if it can invoke it, etc.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我们成功地做了与上面@Jan 建议的方法类似的事情。更具体地说,我们为所有请求对象定义了一个父类,它将预期的返回类型作为类型参数。更进一步,我们通过反映 API 对象(只不过是一组请求)来生成协议 IDL 和序列化绑定。
将来,Akka 中的实验性类型通道功能可能会对某些机制有所帮助。
We had success doing something similar to the approach suggested by @Jan above. More specifically, we defined a parent class for all request objects which takes the expected return type as a type parameter. Going one step further, we're generating our protocol IDL and serialization bindings by reflecting on API objects (little more than sets of requests).
In the future, the experimental typed channels feature in Akka may help with some of the mechanics.