我看着它,你将消息发送到它。 但为什么? 你为什么不只是使用一个数据库? 必须有一些功能,ActiveMQ的有一个数据库不?
Answer 1:
它用于两个分布式进程之间可靠地通信。 是的,你可以尽快将邮件存储在两个进程之间通信的数据库,但是,由于该消息被接收,你不得不删除邮件。 这意味着一排,插入和删除每条消息。 当您尝试扩展,高达沟通每秒数千邮件,数据库往往摔倒。
面向消息的,另一方面中间件样的ActiveMQ是建立处理这些用例。 他们认为,在一个健康的系统消息很快就会被删除,可以做优化,以避免开销。 它还可以将消息传递给消费者而不是做一个SQL查询来轮询新消息的消费者。 这进一步减少了参与处理新消息的延迟被发送到系统中。
Answer 2:
ActiveMQ的,或者在中间件generall所有消息(MOM)实现被设计用于两个应用程序,或一个应用程序内的两个部件之间发送消息的目的。
从本质上讲,MOM和数据库共享,它们提供事务性和持久性数据存储到可以读取和写入,从一个共同的基础。 最大的区别是使用模式 - 在数据库是非常通用的和在多个表的复杂搜索优化,MOM是阅读邮件优化,一次一个,像时尚FIFO。
JMS,这是一个API ActiveMQ的工具,是Java企业应用的一个重要基石。 这使得信息共享一个相当常见的格式和语义,这使得之间的不同应用程序更容易集成。
当然,也有很多的是仅在ActiveMQ的更详细的特征,线协议如OpenWire,STOMP和MQTT,JMS,EIP与Apache骆驼一起,消息模式,如“请求/应答”和“发布/订阅”,JMS桥接,集群(“经纪人的网络”),允许缩放和分布等,您应该对这些主题阅读了一下,如果你有兴趣,因为它们是相当大的。
Answer 3:
主动MQ有很大的调度支持,这意味着你可以安排你的消息,在特定的时间交付。 我们已经用这种功能来发送服药提醒患者上传的保健方案服药的细节。
Answer 4:
与RDBMS,当处理的数据的行,则通常更新标志指示该行已经被处理,使得不重复该处理。
然而,消息队列,你只需要acknowlege消息,并在未来的消费将处理下一个。
所不同的是UPDATE
比在RDBMS statment是一个非常缓慢的操作acknowlege
在activmeq。
Answer 5:
我想强调以下几点:
去耦 :该系统能够在不连接到通信。 队列所在系统之间,作为通信是通过队列做一个系统的故障绝不会影响其他。 该系统继续当他们起来上班。
恢复支持 :自己坚持在队列中的邮件。 这些消息可以在以后如果队列失败恢复。
可靠的通信 :考虑到处理客户端请求的系统。 在正常情况下,系统接收每分钟100名的请求。 该系统是不可靠的,当请求数超越了平均水平。 在这种情况下,队列可以管理的要求,它可以定期推基于系统吞吐量的消息不打破它。
异步 :客户端服务器通信是非阻塞。 一旦客户端发送请求到服务器时,它可以做其他的操作,而不必等待回应。 当响应收到客户端可以随时处理它。
Answer 6:
从维基百科
阿帕奇ActiveMQ是一个完整的Java消息服务(JMS)客户端用Java编写在一起一个开源消息代理。 在这种情况下是指从一个以上的客户端或服务器促进通信,提供“企业功能”
关于你的查询:
为什么你不会使用一个数据库?
您应该使用数据库持久性数据,而不是临时数据。 假设你必须从发送者将消息发送到接收器。 在接收到消息时,接收器执行一个操作(接收,处理和忘记)。 处理该消息之后,你不需要该消息在所有。 在这种情况下,在永久数据库存储所述消息不是正确的解决方案。
我完全同意关于将与数据库中删除的消息,如果你使用的数据库,而不是邮件系统的@Hiram Chirino答案。
从这个好处的文章 ,该文章
- 企业整合 :不同的语言和不同的操作系统内置允许应用程序相互集成
- 位置透明性 :客户端应用程序并不需要知道服务应用程序位于
- 可靠的通信 -生产者/消息的消费者不必可在同一时间
- 缩放 -可以通过添加更多的服务水平扩展
- 异步通信 -客户端可以发射一个消息并继续而不是阻塞直到该服务发送的响应的其他处理;
- 降低耦合 -由客户端和服务所做的假设也大大减少的前5和效益的结果。 服务可以改变细节约本身,包括它的位置,协议和可用性,而不会影响或破坏客户端。
必须有特点的ActiveMQ有数据库不?
有许多。 看一看文档页面了解详情。 看看使用情况了。
看看这个演示 ,了解的ActiveMQ的内部。
Answer 7:
假如你有一个正在为在同一时间多个位置使用的应用程序。 同时假设你的应用程序来处理每分钟或类似的这样正常分贝操作一些要求无法处理这样的操作1000,的ActiveMQ作为消息处理它需要所有的消息到队列中,所以即使在一个位置你的应用程序崩溃的一个其他位置不会受到影响。