有效消息可以在Message Bro Q中保留多长时间

时间:2013-09-25 13:46:37

标签: jms persistence message-queue amqp middleware

我计划基于AMQP和JMS API的一些实现来拥有持久消息队列。我想知道是否可以(从架构的角度来看)将消息留在队列中数小时。最多一天

我计划将消息代理基本上用作另一个持久层。这可行吗?

我正在评估的技术是ActiveMQ,RabbitMQ或qupid。

2 个答案:

答案 0 :(得分:2)

  

我计划将消息代理用作另一个持久层   基本上。这可行吗?

代理的消息保留持久性机制通常是基于文件的,或JDBC;任何一个都会工作。它可行吗?当然,它是代理的一个特性,将其用于预期目的并没有错,假设临时留言是您的目标; 1天不是什么大不了的事。

但是,如果您计划保留1天或更长时间的邮件,我建议您根据平均邮件大小和每天可能最终排队的邮件总数进行一些计算。默认情况下,队列深度通常是一个较小的数字,如10Mb,如果超过,则代理可能会丢弃后续消息;你想防止这种情况发生。供应商处理的方式不同,因此请查看RabbitMq和ActiveMQ以了解具体信息以及使用哪些配置参数来控制深度。我知道SonicMq有一个所谓的“DeadMessage”队列,一个过期或无法传递的消息的目的地;其他产品可能有类似的东西。

答案 1 :(得分:1)

拥有持久队列是可以的,如果消息在队列中闲逛就可以了:由于更新,网络问题等原因,客户端可能会断开连接。这是队列将发送器与接收器分离的一个好处,队列就是缓冲。然而,这些用例不是正常的操作模式,而是一种特殊的情况。

从技术上讲,使用消息传递代理作为“另一个持久层”是可行的,但在这种情况下,数据库可能更合适,因为快速消息传递/消息传递长期存储/数据库是不同的工具/方案。所以问自己一个问题:它仍然是消息传递还是已经是数据库?

如果在您的用例中,正常的消息延迟(=发送和接收之间的时间)总是超过一小时,数据库可能会更好,因为 JMS选择器通常比数据库更慢且更不舒服查询使用 where子句

还有另一个方面:考虑在JMS提供程序中对消息进行联机备份的需求,尤其是在HA群集模式下。使用数据库可能更容易。