我查了一下,它曾经在两个系统之间发送消息。但为什么?您为什么不只使用Database
?必须具有ActiveMQ
不具有Databases
的某些功能吗?
它用于在两个分布式进程之间可靠地通信。是的,您可以将消息存储在数据库中以在两个进程之间进行通信,但是,一旦收到消息,就必须删除该消息。这意味着将为每条消息插入和删除一行。当您尝试扩大每秒传输数千条消息的速度时,数据库容易崩溃。
另一方面,像ActiveMQ这样的面向消息的中间件经过构建,可以处理这些用例。他们认为,运行状况良好的系统中的消息将很快删除,并且可以进行优化以避免开销。它还可以将消息推送给使用者,而不必由使用者通过执行SQL查询来轮询新消息。这进一步减少了处理发送到系统中的新消息所涉及的等待时间。
ActiveMQ,或者一般来说,所有面向消息的中间件(MOM)实现都是为了在两个应用程序或一个应用程序内的两个组件之间发送消息而设计的。
本质上,MOM和数据库具有共同的基础,因为它们提供了可读取和写入的事务性和持久性数据存储。最大的区别在于使用模式-数据库非常通用并且针对在多个表上的复杂搜索进行了优化,而MOM则针对读取消息进行了优化,以FIFO的方式一次读取一个。
JMS,这是ActiveMQ实现的API,是Java Enterprise应用程序中的重要基石。这使得消息共享一种相当通用的格式和语义,从而使不同应用程序之间的集成更加容易。
当然,有许多更详细的功能仅在ActiveMQ中提供,诸如OpenWire,STOMP和MQTT的有线协议,JMS,EIP以及Apache Camel以及诸如“ request / reply”和“ publish / subscribe”之类的消息模式。 ,JMS桥接,群集(“代理网络”),它们允许扩展和分发等。如果您有兴趣,因为它们很大,因此应该稍微阅读一下这些主题。
Active MQ具有强大的调度程序支持,这意味着您可以调度要在特定时间传送的消息。我们已经使用此功能向在医疗保健场景中上载药物详细信息的患者发送药物提醒。
使用RDBMS,当处理一行数据时,通常会更新一个标志,指示该行已被处理,因此不会重复进行处理。
我想强调以下内容:
假设您有一个同时在多个位置使用的应用程序。还要假设您的应用程序每分钟必须处理1000个请求或类似的操作,因此正常的db操作无法处理此类操作,Activemq充当消息处理,它将所有消息放入队列中,因此即使您的应用程序之一在一个位置崩溃其他位置不会受到影响。