ActiveMQ in Action-5.1 How are messages stored by ActiveMQ?- 高飞网

5.1 How are messages stored by ActiveMQ?

2016-05-18 15:46:18.0

5.1 ActiveMQ消息如何存储?

    要理解ActiveMQ中的消息存储,首先学习一些消费存储机制的知识是很重要的。这对如何配置也有所帮助,并且测让你能意识到ActiveMQ在持久化消息上传递时发生了什么。发送到queue和topic的消息用不同的存储,因为topic中有些存储优化,但它不适合queue,之后会解释。

    queue的存储是简单而基本的先进先出模式(FIFO)的存储。看一下图5.1的描述。某一时刻,一个消息被分发到一个单独的消费端,只有当消息被消费并被识别,才会被服务端存储给删除掉。

    

    而对于topic的持久订阅者(Durable subscriber),每个消费者都会得到一个消息的副本。为了节省存储空间,只有一个副本会在服务端保留。存储中的持久订阅对象,维护了下一个存储消息的指针,然后像图5.2中所描述的那样分发一个消息副本给客户端。消息存储以这种方式实现,因为每个持久订阅者可能以不同的速度消费消息,或者他们在那时根本没有运行。正因为每个消息可能有多个消费者,所以直到被所有的持久订阅者都接受到钱,消息都不能从存储中删除。



    ActiveMQ的每种消息存储,都支持对queue和topic的消息存储,虽然每种消息存储都明显不同。举例来说,内存存储会在内存中保留所有的消息。本章接下来的内容,会详细介绍ActiveMQ不同存储的配置,他们的优点与缺点。