Active MQ具有出色的调度程序支持,这意味着您可以安排在特定时间发送消息。我们使用此功能向患者发送药物提醒,以便在医疗保健方案中上传他们的药物详细信息。
使用RDBMS,当您处理一行数据时,通常会更新一个标志,指示该行已被处理,以便不重复处理。
但是,使用Message Queue,您只需要确认一条消息,下一个消费者将处理下一个消息。
不同的是 UPDATE 与数据库相比,RDBMS中的语句运算速度非常慢 acknowlege 在activmeq。
UPDATE
acknowlege
从 维基百科
Apache ActiveMQ是一个用Java编写的开源消息代理以及完整的Java消息服务(JMS)客户端。它提供“企业功能”,在这种情况下,它意味着促进来自多个客户端或服务器的通信
关于你的疑问:
为什么不使用数据库?
您应该将数据库用于持久数据而不是临时数据。假设您必须从发件人向Receiver发送消息。在接收消息时,Receiver执行一个操作(接收,处理和忘记)。处理完该消息后,您根本不需要该消息。在这种情况下,将消息存储在持久数据库中并不是一个正确的解决方案。
我完全同意 @Hiram Chirino 关于插入和回答的答案如果使用数据库而不是消息传递系统,则删除数据库中的消
从中受益 文章 还有这个 文章
必须有功能ActiveMQ有数据库不?
有许多。看一下 文件 页面了解更多详情。看一下 用例 太。
看看这个 介绍 了解ActiveMQ的内部。
它用于在两个分布式进程之间可靠地通信。是的,您可以将消息存储在数据库中以在两个进程之间进行通信,但是,一旦收到消息,您就必须删除该消息。这意味着每个消息的行插入和删除。当您尝试扩展每秒传输数千条消息时,数据库往往会倒下。
另一方面,像ActiveMQ这样的面向消息的中间件是为处理这些用例而构建的。他们假设健康系统中的消息将被非常快速地删除,并且可以进行优化以避免开销。它还可以将消息推送到消费者,而不是消费者必须通过执行SQL查询来轮询新消息。这进一步减少了处理发送到系统中的新消息所涉及的延迟。
ActiveMQ,或者通常所有面向消息的中间件(MOM)实现都是为了在一个应用程序内的两个应用程序或两个组件之间发送消息而设计的。
从本质上讲,MOM和数据库共享一个共同的基础,因为它们提供了可以读写的事务和持久数据存储。最大的区别在于使用模式 - 数据库非常通用,并针对多个表的复杂搜索进行了优化,MOM针对以类似FIFO的方式一次一个地读取消息进行了优化。
JMS是一个API ActiveMQ实现的,是Java Enterprise应用程序中的重要基石。这使得消息共享相当普通的格式和语义,这使得不同应用程序之间的集成更容易。
当然,还有很多更详细的功能,只有在ActiveMQ,有线协议如OpenWire,STOMP和MQTT,JMS,EIP和Apache Camel,消息模式如“请求/回复”和“发布/订阅”,JMS桥接,群集(“经纪人网络”),允许扩展和分发等。如果您感兴趣,您应该仔细阅读这些主题,因为它们相当大。
我想强调以下几点:
的 解耦 强> :系统无需连接即可进行通信。队列位于系统之间,一个系统故障永远不会影响其他系统,因为通过队列进行通信。这些系统在启动时继续工作。
的 恢复支持 强> :队列中的消息本身仍然存在。如果队列失败,可以稍后恢复消息。
的 可靠的沟通 强> :考虑一个处理客户端请求的系统。在正常情况下,系统每分钟接收100个请求。当请求数超过平均值时,该系统不可靠。在这种情况下,Queue可以管理请求,它可以根据系统吞吐量定期推送消息,而不会破坏它。
的 异步 强> :客户端服务器通信是非阻塞的。客户端向服务器发送请求后,无需等待响应即可执行其他操作。当收到响应时,客户端可以随时处理它。
假设您有一个同时在多个位置使用的应用程序。 还假设您的应用程序必须每分钟处理1000个请求或类似的事情,因此正常的数据库操作无法处理此类操作,Activemq充当消息处理它将所有消息带入队列,因此即使您的某个应用程序在一个位置崩溃其他位置不会受到影响。