Java的RPC框架[关闭]

Posted

技术标签:

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

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

【问题讨论】:

【参考方案1】:

您的选择包括:

SOAP 网络服务 XML-RPC Apache Thrift Protocol Buffers(另见this question) Apache Avro RESTful Web 服务

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

以上是关于Java的RPC框架[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

RPC框架是啥之Java自带RPC实现,RMI框架入门

RPC框架学习 - 1

java中常见的rpc框架介绍

分布式架构的基石,简单的 RPC 框架实现(JAVA)

JAVA中几种常用的RPC框架介绍

JAVA中几种常用的RPC框架介绍