jruby应用程序和不同服务器上的Java应用程序之间的通信

时间:2013-02-13 14:42:19

标签: java ruby-on-rails ruby jboss jruby

任何人都有Jruby projectJboss上运行(使用torquebox或其他任何东西)并且能够与另一个“japps”进行通信,而不是在jruby app所在的同一个jboss上,即另一个jboss上的一些java项目?

我知道有一个torque-messanging但是dunno是否可以与外部(jruby-app的jboss)app进行通信?

欢迎最佳做法。
提前谢谢。

P.S。将其他应用程序放在jboss上jruby app不可接受的解决方案。

3 个答案:

答案 0 :(得分:2)

我可以建议您使用Thrift并通过它们建立通信。

Thrift拥有所需语言(Java和JRuby)的生成器,并提供良好和快速的通信。

更新: Thrift是在Facebook开发的RPC(远程过程调用)框架。详细信息,您可以在Wiki

中阅读相关内容

用几句话来节省你的时间,它是什么以及如何使用它:

您在.thrift文件(文件)中描述数据结构和服务接口。并从这个文件生成一个或几个语言(你需要的)所有需要的源文件(所有需要序列化)。你可以在几行中简单地创建服务器和客户端

在客户端内部使用它看起来就像你只使用简单的类。

使用Thrift,您可以使用所使用的协议和传输方式。 在大多数情况下,通过阻塞或非阻塞传输使用二进制或紧凑协议。因此,网络通信将是轻快的+快速序列化。

SOAP(基于HTTP上的XML)软件包,它的大小几倍,不适合发送二进制数据,但不仅如此。 XML序列化也很慢。因此,使用SOAP可以获得很大的开销。还有肥皂,你需要编写(或使用第三方)lib来调用服务器(微小的网络层),thrift已经为你做了。

SMTP和基本上JMS不适合实时和问答通信。 我的意思是,如果您只需要将一些消息放入队列中,某人有时会发出此消息并对其进行处理 - 您可以(并且应该)使用JMS或任何其他MQ服务(Thrift可以执行此操作,但MQ架构更适合此问题)。 但是如果你需要实时的查询 - 应答调用,你应该使用RPC作为协议,它可以是HTTP(REST,SOAP),二进制(Thrift,ProtoBuf,JDBC等)或任何其他。 Thrift(和ProtoBuf)提供了生成客户端和服务器的框架,因此它将您从低级问题中解放出来。

P.S: 我在过去https://github.com/imysak/using-thrift(通过Thrift Java服务器+ Java客户端或node.js客户端进行通信)中做了一些示例,可能对某人有用。但是你可以找到更简单,更好的例子。

答案 1 :(得分:1)

您可以使用Web服务或JMS

答案 2 :(得分:1)

Torquebox支持JMS。您指定的gem torquebox-messaging允许在运行JRuby应用程序的本地JBoss AS服务器/集群上发布和处理HornetQ消息。我认为它目前不支持连接到远程服务器。

在JRuby应用程序中使用此功能,您可以在另一台服务器上配置Java应用程序,以便与运行JRuby应用程序的JBoss AS中运行的HornetQ进行通信。

或者,您可以始终实现自己的通信协议或使用其他Java库 - 您可以访问要从JRuby运行的任何Java。