我被要求设计和实现一个系统,用于从大量设备接收大量自动化传感器数据。这些数据将定期生成并作为xml发送到服务器上。如果设备没有收到来自服务器的特定确认,设备将继续重新发送相同的数据。在将数据插入主数据库中的多个表格之前,需要对这些数据进行一些潜在的繁重处理,另外还需要将一些数据点排入其他外部URL。使用JMS队列的潜在缺陷?
我正计划使用一个Java应用程序服务器(倾向于GlassFish)和一个servlet来接收传入数据。我想实现某种排队机制来临时存储数据,以便返回到传感器的响应不依赖于所有中间处理。分离的独立队列也是数据重定向片的要求。之后做一些研究的两个主要的选择似乎是:
1)应用服务器上安装一个数据库,并使用表格各种队列。队列将由Java应用程序处理,或者在应用程序服务器中运行,或者作为自己的服务单独运行。
2)使用数据库支持的JMS解决方案来实现排队。
我对JMS并不熟悉,但从我读过的内容来看,它似乎是这种情况下更好的解决方案。主要要求是传感器数据在处理之前不会丢失或丢失,并且或多或少地按顺序处理。我们还希望在特定时间停止某些队列的处理,但仍让他们累积数据并使这些消息永不过期。
随着战略1,我很明显如何满足这些要求,但它可能不如健壮性和可扩展性,并且比战略2更复杂,因为我需要编写自己的多线程代码来处理各种独立队列。我想知道为什么使用JMS队列可能存在的潜在缺陷,因为我从来没有和他们合作过。
,数据安全是一个大问题,所以我需要确保JMS可以保证在重新启动服务器,停电的情况下,无数据丢失,或者如果队列中获得某种原因非常大。例如,在一段时间内完成主数据库事务的问题可能会导致JVM耗尽内存,崩溃并丢失所有累积的数据? (这将是噩梦场景)。
此外,我想知道是否有任何方法可以通过应用服务器管理工具暂停JMS队列处理,或者轻松看到队列中有什么(我将排队一个对象,这将是消息xml加上一些其他数据,包括收到的时间戳等)。我已经阅读了几篇关于相关问题的文章,但希望得到一些直接的反馈。基本上我想知道JMS不是合适的排队解决方案的实例(如果有的话),以及这是否是其中一种情况。任何意见是极大的赞赏。
根本不是Java的人,但这不意味着等待回复队列中的结果回应?如果你的客户端协议是HTTP,这看起来会成为一种破坏行为。这不会牵扯一个线程吗? – Bob77
实际上有两个单独的排队场景,我必须处理。一个是到主数据库的队列,它将通过jdbc连接池进行连接。这是servlet写入的内容。另一个将包含这些数据的一个子集,在主队列中成功处理后,这些数据将被放入这个单独的队列中。该队列的使用者将通过http发送消息到另一个站点。这意味着最初的servlet响应将从http post到第三方站点的结果中被两个队列分开。 – user256447