ActiveMQ的用途是什么-我们可以使用数据库应用消息传递概念吗?


Answers:


178

它用于在两个分布式进程之间可靠地通信。

是的,你可以存储信息的数据库如收到消息你必须尽快两个进程之间的通信,但是,DELETE消息,这意味着一列INSERT,并DELETE为每个邮件。
当您尝试扩大每秒传输数千条消息的速度时,数据库容易崩溃

ActiveMQ另一方面,面向消息的中间件[MOM] 则可以处理这些用例。
他们认为,运行状况良好的系统中的消息将很快删除,并且可以进行优化以避免开销

它还可以将消息推送给使用者,而不是使用者必须通过执行SQL查询来轮询新消息。
这进一步减少了处理处理发送到系统中的新消息所涉及的等待时间。


很好的解释!这两个分布式过程必须是同一过程吗?我的意思是同一应用程序的两个实例?
Maverick

不,任意应用程序都可以通过ActiveMQ相互通信。例如,应用程序A和B可以创建队列AB和BA(从B读取A的消息,反之亦然),并将彼此的消息发送到匹配队列。
Alex


67

ActiveMQ,或通常所有面向消息中间件(MOM)的实现都是为了在两个应用程序或一个应用程序内的两个组件之间发送消息而设计的。

本质上,MOM和数据库具有共同的基础,因为它们提供了可读写的事务性和持久性数据存储。
最大的区别是使用模式-数据库非常通用并且针对在多个表上的复杂搜索进行了优化,而MOM则针对读取消息进行了优化,以FIFO之类的方式[FIFO]一次。

JMSActiveMQ实现的API是Java Enterprise应用程序中的重要基石。这使得消息共享一种相当通用的格式和语义,从而使不同应用程序之间的集成更加容易。

当然,也有很多的更详细的特征是仅在ActiveMQ中,有线协议等OpenWireSTOMP并且MQTTJMSEIP与Apache骆驼,消息模式,如“请求/应答”和“发布/订阅”,JMS桥接,聚类(统称为”经纪人网络”),可以进行扩展和分发等。
如果您有兴趣,应该对这些主题进行一些阅读,因为它们很大。


25

ActiveMQ具有强大的计划程序支持,这意味着您可以计划在特定时间发送邮件

我们已使用此功能将药物提醒发送给在医疗保健场景中上载药物详细信息的患者。


3
太酷了。我们已经将Quartz调度库用于类似的提醒目的。
悉达多

我们将Oracle数据库Scheduled Jobs用于相同的目的。
ahmednabil88

15

使用RDBMS,在处理一行数据时,通常会更新一个标志,指示该行已被处理,因此不会重复处理。

但是,使用Message Queue,您只需要确认一条消息即可,下一个使用者将处理下一条。

区别在于,UPDATEacknowledgeinactivemeq 相比,RDBMS 中的陈述是非常缓慢的操作。


8

我想强调以下几点:

解耦:系统无需连接即可通信。队列位于系统之间,一个系统故障将永远不会影响其他系统,因为通过Queue完成了通信。系统启动后将继续工作。

恢复支持:队列中的消息本身仍然存在。如果队列失败,可以稍后还原消息。

可靠的通信:考虑一个处理客户请求的系统。在正常情况下,系统每分钟接收100个请求。当请求数超过平均数时,该系统不可靠。在这种情况下,Queue可以管理请求,并且可以根据系统吞吐量定期推送消息而不会中断请求。

异步:客户端服务器通信是非阻塞的。客户端将请求发送到服务器后,它可以执行其他操作,而无需等待响应。收到响应后,客户端可以随时进行处理。


7

来自维基百科

Apache ActiveMQ是一个用Java编写的开源消息代理,同时带有完整的Java Message Service(JMS)客户端。它提供“企业功能”,在这种情况下,这意味着促进来自多个客户端或服务器的通信

关于您的查询:

你为什么不使用数据库?

您应该将数据库用于持久数据,而不是临时数据。假设您必须从发件人向接收方发送一条消息。接收到消息后,接收方将执行一项操作(接收,处理和忘记)。处理完该消息后,您根本不需要该消息。在这种情况下,将消息存储在持久数据库中不是正确的解决方案。

如果您使用数据库而不是消息传递系统,则我完全同意@Hiram Chirino有关在数据库中插入和删除消息的答案。

本文本文中受益

  1. 企业集成:允许使用不同语言和不同操作系统构建的应用程序相互集成
  2. 位置透明:客户端应用程序不需要知道服务应用程序的位置
  3. 可靠的通信 –消息的生产者/消费者不必同时使用
  4. 扩展 –可以通过添加更多服务来水平扩展
  5. 异步通信 –客户端可以触发一条消息并继续其他处理,而不会阻塞直到服务发送响应为止;
  6. 减少耦合 –由于前5个优点,大大减少了客户和服务的假设。服务可以更改有关其自身的详细信息,包括其位置,协议和可用性,而不会影响或破坏客户端。

ActiveMQ必须具有数据库没有的功能?

有许多。请查看文档页面以获取更多详细信息。也看看用例

查看此演示文稿以了解ActiveMQ的内部。


2

假设您有一个同时在多个位置使用的应用程序。还要假设您的应用程序每分钟必须处理1000个请求或类似的操作,因此正常的db操作无法处理此类操作,Activemq充当消息处理,它将所有消息放入队列中,因此即使您的应用程序之一在一个位置崩溃其他位置不会受到影响。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.