我试图解决我们两人都没有使用JMS经验的设计意见分歧。
我们希望在发生新事件时使用JMS在j2ee应用程序和独立应用程序之间进行通信。我们将使用单个点对点队列。两端都是基于Java的。问题是,是在JMS消息体中发送事件数据本身,还是发送指向数据的指针,以便独立程序可以检索它。详情见下文。
我有一个j2ee应用程序,它支持新的和更新的人员以及相关事件的数据输入。人员记录和相关事件被写入Oracle数据库。还有一些独立的、独立的程序,用于向数据库提供新的人员和事件记录。当通过5-10个不同的应用程序功能中的任何一个发生新事件时,我需要使用特定于行业的标准消息传递协议通过出站接口通知远程系统。出站接口被设计为独立的应用程序,通过异步操作和将其移动到单独的服务器来支持可伸缩性。
输入事件时,j2ee应用程序当前在内存中具有大部分数据。数据将由大约6个不同的对象组成;一个person对象和一些具有多个实例的对象,平均大小在3000到20,000字节之间。有些特殊情况可能会是这个数字的数倍。
从性能和可靠性的角度来看,我是应该对JMS消息进行建模以传递创建接口消息所需的所有数据,还是应该对JMS消息进行建模以包含数据的记录键,并让独立的Java应用程序检索数据以创建接口消息?
发布于 2010-05-07 18:04:37
我不会只关注决策的性能,还会关注其他非功能性的考虑因素。
我一直在一个系统上工作,我们决定不发送消息中的数据,而是发送数据库中数据的PK。我们的方法更接近于command message模式。我们的选择是基于以下原因:
然而,使用JMS +数据库确实会使设计变得有点复杂:
我想这两种方法都能行得通。我已经描述了导致我们不发送消息中的数据的原因,但您的系统和需求可能会有所不同,因此在您的情况下发送消息中的数据可能仍然更容易。我不能提供一个明确的答案,但我希望它能帮助你做出决定。
发布于 2010-05-07 06:28:01
发送数据,而不是指针。我不会认为你的消息是无法处理的超大尺寸。
发布于 2010-05-07 06:59:08
队列处理数据是没有问题的,队列中的消息无论如何都是持久化的(内存、文件或数据库持久化,只要更适合您的队列大小)。
如果您只是将数据放在队列中的句柄,那么处理队列的应用程序将进行不必要的工作来获取发送者已经拥有的数据。
https://stackoverflow.com/questions/2784703
复制相似问题