在Web和业务层之间使用RMI或者JMS有什么优缺点?

时间:2020-03-05 18:55:36  来源:igfitidea点击:

对于典型的Web客户端-toServlet / WS -toBusiness Tier(Spring或者EJB)应用程序,除了基本的同步/异步之外,还需要权衡诸如远程RPC或者Web(Servlet)层到远程业务层的消息传递之类的方法的权衡。方面?

解决方案

回答

我们通过Spring使用RMI,发现它非常易于使用,相当健壮和快速。尽管我们的要求是要有一个相当敏感的链接,并且实际上并不需要添加消息传递组件。

回答

Web客户端是指Web浏览器吗?如果是这样的话,我建议我们看一下DWR或者JAX-RS之类的东西。仅当双方都是Java代码时,RMI或者JMS才真正起作用。

对于任何远程处理技术,使用它们的最大问题往往是该技术对业务对象的侵入程度。例如在任何地方使用RMI接口/异常,或者在业务代码中使用JMS API。

我的建议是在Java中到处使用POJO,然后使用诸如Spring Remoting之类的技术在中间件上分层(无论是RMI还是JMS或者其他任何东西),但要完全将中间件代码与业务逻辑分离,以便我们可以随时在各种技术之间进行切换(并使业务逻辑代码更简单,并专注于业务问题)。

例如,请参见Spring Remoting的Camel实现,然后允许我们使用这些传输和协议中的任何一个,例如RMI,JMS甚至是简单的HTTP,电子邮件,文件或者XMPP,然后使用简单的URI字符串更改就可以在它们之间轻松切换。

回答

SUN RMI为我们破产了。

长时间连续运行的应用程序的设置和垃圾收集。我们正在修补程序,以使其能够连续工作。我们运行的JMS应用程序不会遇到RMI出现的内存不足错误或者gc问题。需要定期调用System.gc()且不与增量收集一起工作以恢复资源的所有内容均编码错误。

使用JDK 6和正确的属性设置可以提高RMI的可靠性,但是JHC是一个坚固的框架。通过在nio中使用通道并修复system.gc()的sun nio使用,可以极大地改善RMI。

正确的答案将通讯(机制)与域代码分开。 RPC是紧密耦合的,协议和应用程序可能会相互干扰。 JMS将协议与应用程序分开,这是一个更好的范例。