【问题标题】:RPC Framework for Java [closed]Java的RPC框架[关闭]
【发布时间】:2012-02-27 21:14:37
【问题描述】:

我正在构建一些服务,我需要它们来远程访问彼此的方法。 我目前正在使用 Spring 的 RmiServiceExporter,但我想知道是否有一个不依赖于 java 类、序列号等的框架。 换句话说,我不想在服务之间共享 java 代码/类。

【问题讨论】:

    标签: java frameworks rpc


    【解决方案1】:

    您的选择包括:

    REST 并不是真正的 RPC。它需要一种不同的思维方式,你专注于定义一组丰富的资源(名词)而不是一组丰富的方法(动词)。

    其他的可以提供更传统的 RPC,但与 Java 的耦合不那么紧密,因此与编程语言无关。

    在 SOAP 中,您可以在 WSDL 中编写接口,或者从带注释的 Java 类中生成它。

    在 Thrift 中,您在 Thrift IDL 中编写接口,并从中生成 Java 类。

    【讨论】:

      【解决方案2】:

      使用 RMI,您将始终致力于 Java 类。我可以建议您看看 RESTful Web 服务方法吗?

      【讨论】:

        【解决方案3】:

        您可以查看 Spring 的 HttpInvoker。或者 Spring 远程处理支持的 Hessian 和 Burlap。见http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/remoting.html

        【讨论】:

          【解决方案4】:

          Protocol Buffers 是避免序列化/版本化问题并保持语言无关的好方法。

          【讨论】:

            【解决方案5】:

            另一个选项是Versile Java(我是开发人员之一)。它正在开发中,但已经相当稳定,因此您可能想尝试一下 GNU Affero GPL 许可证是否适用于您的项目。

            Versile Java 处理对象级交互。通过继承适当的基类并使用注释来公开对象和方法是直接的。下面是一个简单的示例类。

            import org.versile.orb.external.*;
            @Doc(doc="Provides an echo service")
            public class Echoer extends VExternal {
                @Publish(show=true, ctx=false)
                @Doc(doc="Echo service, returns the provided argument.")
                public Object echo(Object obj) {
                    return obj;
                }
            }
            

            作为奖励,您还可以使用它与Versile Python 客户端或服务进行交互。

            【讨论】:

            • 谢谢。我去看看
            • @Mikhas 希望它能满足您的需求;如有任何问题,请随时使用我们的forum
            猜你喜欢
            • 2010-10-18
            • 2012-06-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-11-21
            • 2010-12-31
            • 2011-06-11
            • 2012-12-25
            相关资源
            最近更新 更多