在ActiveMQ中,MessageListener是否依赖于消息存储的数据日志文件



我在应用程序中使用ActiveMQ作为JMS实现服务器。场景类似于,有一个主题,我有许多持久订阅者,他们使用发布的消息,还有一个消息侦听器,它将数据从消息对象保存到中央数据库服务器。有一个生产者线程,它不断在同一主题上发布持久消息。我正在使用KahaDB进行持久消息存储。消息一发布,kahaDB就会在消息存储中创建一个数据日志文件,以保持消息,直到所有持久订户都使用它。我想知道,如果在任何时候,我关闭JMS服务器并删除所有数据日志文件会有什么影响。是不是只有少数持久子筛选器不会接收到数据日志文件中的消息供其使用,还是有可能少数消息没有保存在中央数据库中,这是由消息侦听器在本主题中完成的。非常感谢任何提示或帮助。。。。。。提前谢谢。

如果停止并启动broker,无论是否删除数据文件,尚未收到已发布消息的主题使用者都将不再收到该消息。这背后的原因是发送到主题的消息不会写入持久消息存储。

持久性和持久性不是一回事。持久订阅告诉代理保留订阅状态,以防订阅方断开连接-在消费者断开连接时发送的任何消息都将保留。另一方面,非持久订阅是有限的;如果订阅者断开连接,则会错过在此期间发送的任何消息。所有消息都存储在内存中,并且不会在代理重新启动后继续存在。

另一方面,消息持久性存储用于最终传递的消息。这可以防止灾难性的故障,或者以后交付给可能还不活跃的消费者。

如果您想使用pub-sub广播消息,并使订阅看起来持久并且在代理重新启动后仍然有效,则应该使用虚拟目的地,而不是持久订阅。

关闭代理并删除数据目录后,将不会有任何消息(持久或非持久)存活下来。

最新更新