首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMS消息。模型包含数据还是指向数据的指针?

JMS消息。模型包含数据还是指向数据的指针?
EN

Stack Overflow用户
提问于 2010-05-07 05:37:24
回答 4查看 311关注 0票数 3

我试图解决我们两人都没有使用JMS经验的设计意见分歧。

我们希望在发生新事件时使用JMS在j2ee应用程序和独立应用程序之间进行通信。我们将使用单个点对点队列。两端都是基于Java的。问题是,是在JMS消息体中发送事件数据本身,还是发送指向数据的指针,以便独立程序可以检索它。详情见下文。

我有一个j2ee应用程序,它支持新的和更新的人员以及相关事件的数据输入。人员记录和相关事件被写入Oracle数据库。还有一些独立的、独立的程序,用于向数据库提供新的人员和事件记录。当通过5-10个不同的应用程序功能中的任何一个发生新事件时,我需要使用特定于行业的标准消息传递协议通过出站接口通知远程系统。出站接口被设计为独立的应用程序,通过异步操作和将其移动到单独的服务器来支持可伸缩性。

输入事件时,j2ee应用程序当前在内存中具有大部分数据。数据将由大约6个不同的对象组成;一个person对象和一些具有多个实例的对象,平均大小在3000到20,000字节之间。有些特殊情况可能会是这个数字的数倍。

从性能和可靠性的角度来看,我是应该对JMS消息进行建模以传递创建接口消息所需的所有数据,还是应该对JMS消息进行建模以包含数据的记录键,并让独立的Java应用程序检索数据以创建接口消息?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-07 18:04:37

我不会只关注决策的性能,还会关注其他非功能性的考虑因素。

我一直在一个系统上工作,我们决定不发送消息中的数据,而是发送数据库中数据的PK。我们的方法更接近于command message模式。我们的选择是基于以下原因:

  • Data size:我们将数据存储在BLOB中,因为它可以通过hughe。在您的情况下,数据的大小可能符合消息anayway.
  • Message loss:我们做了最坏的打算。如果消息丢失,我们可以恢复数据,并且我们有一个恢复过程来重新提交消息。看起来可能是偏执的,但这里有两种情况可能导致一些消息丢失:(1)队列被错误地清除(2)发生错误,消息在很长一段时间内无法传递。他们去死消息队列(DMQ),最终达到它的极限并开始丢弃消息,如果没有配置correctly.
  • Monitoring:不同的消息/命令可以更新数据库中的同一行。这很容易监控和troubleshoot.

然而,使用JMS +数据库确实会使设计变得有点复杂:

  • distributed transactions:这增加了一些复杂性,有时还会增加some problems。分布式事务与“常规”事务有细微的区别,比如分布式超时。
  • persitency:代码不太直观。数据必须首先持久化才能拥有PK,如果使用ORM,这会导致代码的一些复杂性。

我想这两种方法都能行得通。我已经描述了导致我们不发送消息中的数据的原因,但您的系统和需求可能会有所不同,因此在您的情况下发送消息中的数据可能仍然更容易。我不能提供一个明确的答案,但我希望它能帮助你做出决定。

票数 0
EN

Stack Overflow用户

发布于 2010-05-07 06:28:01

发送数据,而不是指针。我不会认为你的消息是无法处理的超大尺寸。

票数 0
EN

Stack Overflow用户

发布于 2010-05-07 06:59:08

队列处理数据是没有问题的,队列中的消息无论如何都是持久化的(内存、文件或数据库持久化,只要更适合您的队列大小)。

如果您只是将数据放在队列中的句柄,那么处理队列的应用程序将进行不必要的工作来获取发送者已经拥有的数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2784703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档