我已经经历了好的和坏的方面的消息系统 真正的生产环境, ,我必须承认,一个组织良好表或模式的表格简单的节拍每一时间的任何其他形式的通讯队列,因为:

  1. 数据是永久性存储在一个表中。我见过这么多java(jms)应用程序,损失或消失的消息他们的方式对未捕获的例外情况或其他错误。
  2. 排队往往填补。数据库存储几乎是无限的,而不是。
  3. 表都方便,而你必须使用esotic仪器读取的队列。

你有什么看上的每一个方法吗?

有帮助吗?

解决方案

短语 节拍每个时间 完全取决于你的要求开始。肯定其不会被击败每一次每一个人。

如果你是建立一个单一的系统,该系统已经在使用一个数据库,你不必很高性能吞吐量要求和你不必与任何其他的团队或系统然后你可能是正确的。

为简单的、低产量,主要是个螺纹的东西,数据库是一个完全现代信息的队列。

其中一个消息,队列中的亮点是当

  • 你想要一个高效能、高并发和扩展的负载均衡所以你可以处理数以万计的消息的每秒同时在许多服务器/工艺(使用一个数据库表你会很幸运过程几百二和处理与多线程的是很难作为一个过程将倾向于锁消息队表)
  • 你需要交流的不同系统之间使用不同的数据库(所以不需要手写访问系统数据库的其他人在不同的团队等)

为简单的系统与一个单一的数据库,团队以及相当温和的性能要求确保使用一个数据库。使用正确的工具的工作等。

但是那里的消息队列服务是在大型组织那里有大量的系统,需要相互通信(和所以你不想要一个业务数据库是一个中心点或失败的地方版的地狱),或者当你有高性能的要求。

在性能方面的消息队总是会击败一个数据库表作为信息队专门设计的工作并且不依赖于悲观的表锁定(其所需的数据库实现的队列-做的负载平衡), 好消息队将执行预先加载的信息,队列,以避免的网络数据库的开销.

同样-你会永远不会使用一个数据库,做到负载平衡HTTP请求您的网服务器的-因为它太慢,如果你有高性能的要求为负载均衡器你会不会使用的数据库。

其他提示

我首先使用了表格,然后在(如果有)理由的情况下重构成一个完整的msg队列 - 如果你的设计合理,这是微不足道的。

最大的好处是a。)它更容易,(b。它是一个更好的审计跟踪,因为你有其他表加入,c。)如果你真的很了解数据库工具,它们比消息队列工具,d。)在应用程序已存在的上下文中设置测试/开发环境通常会更容易一些(如果适用相同的熟悉程度)。

哦,和e。)对于你和其他人来说,它不是学习,安装,配置,管理和支持的另一种产品。

IMPE,它同样可靠,可断开,如果需要更高的可扩展性,您可以进行转换。

  1. 数据永久存储在表格中。我已经看到很多java(jms)应用程序在未捕获的异常或其他错误的路上松散或消失了消息。

    哪个JMS实现? Sun销售可靠的队列,不会丢失消息。也许你刚刚购买了一款符合JMS标准的俗气产品。 IBM的MQ非常可靠,并且有JMS库可以访问它。

  2. 队列往往会填满。相反,Db存储几乎是无限的。

    嗯...如果你的队列填满了,听起来好像有些东西坏了。如果您的应用程序崩溃,那不是一件好事,而且队列与此无关。如果你购买了一个非常差的JMS实现,我可以看到你可能对它不满意的地方。这是一个竞争激烈的市场。找一个更好的队列管理器。 Sun的JCAPS有一个非常好的队列管理器,以前是SeeBeyond消息队列。

  3. 表格易于访问,而您必须使用esotic工具从队列中读取。

    这不符合我的经验。通过这种特殊的“其他语言”访问表格。 (SQL),并要求我了解从表到对象的结构映射以及从VARCHAR2到String的数据类型映射。此外,我必须使用某种访问层(JDBC或使用JDBC的ORM)。这似乎非常非常复杂。使用简单的发送和接收通过MessageConsumers和MessageProducers访问队列。

这听起来好像你已经经历了不是固有的消息,而是伪不实施通信系统。为大楼通讯系统更难于建设数据库系统?是的,如果你所要做的就是建立数据库系统。

  • 失去信息对未捕获的例外?这就是不错的消息队列。该应用程序正在使用的都是差的工程。他们除去队列的消息之前处理完成。他们不用交易,或记录日志。
  • 消息队填补的话,数据库存储是"几乎无限"?你说,虽然管理的磁盘空间的东西,数据库没有需要。Message queue需要服务器管理,就像数据库服务器做。
  • 深奥的文书,以从中读取。也许如果你发现异步方法的神秘.也许如果你找到化和反难懂.(至少,那些事情是我发现的神秘当我还是学习的信息。像许多似乎深奥的技术,它们实际上是相当不平凡的一旦你了解他们,和了解他们是一个重要部分,经验丰富的开发人员的教育。)

方面的消息,这使它优于数据库:

  • 异步处理。 消息队列的通知等待进程时,新的消息。为了完成这一功能在数据库中,等待进程需要调查的数据库。
  • 分离的问题。 通信信道是分离的实施细节的信息内容。只有发送和接收需要知道任何有关数据的格式流在一定的消息。
  • 容错。.消息可能时之间的连接服务器的间歇性的。消息队可以存储的消息在本地,并仅向他们对远程服务器时连接的现场。
  • 系统整合。 在窗户的世界,至少、消息是建立进入操作系统。它使用的操作系统的安全模型,它的管理操作系统的工具,等等。

如果你不需要这些东西,你可能不需要的信息。

这里有一个简单的例子中的一个应用程序,用于通讯:我要建一个系统现在在哪里用户,分布于多个网络,进入相当复杂的集的交易用于生产印输出。出生成的计算价格昂贵,并不一部分,他们的工作流程;即用户不在乎输出时的产生时,只是它不会。

因此,我们serialize的交易成的消息,并将它放在一个队。一个过程在一个服务器上运行的争夺消息的队列,产生的产出,和储存的输出成像系统。

如果我们用一个数据库作为我们的消息存储库,我们需要拿出一个模式来存储事务的格式,现在只有发送和接收机关心的,我们需要确保每个工作站的网络上有永久性的持续连接的数据库服务器,我们没有能力来分发这种交易负载在多个服务器,我们的输出服务器就得查询的数据库成千上万的一天时间等待,看看如果有新的就业机会来处理。

排队提供可靠的信息。的存储和转发、中断的性质,排队使更多的可扩展比数据库,更不要说更加坚固。

和队列应该不是真的能用于永久性存储的信息-这是最好把它们视为临时的收件箱,不同数据库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top