默认情况下,ActiveMQ Artemis 将持久消息存储在一组称为“日志”的本地文件中。在多个队列具有相同消息的情况下(例如,在同一 JMS 主题上的多个持久订阅的情况下),实际消息数据仅存储一次,并且每个队列都获得对该消息的“引用”。多次存储完全相同的消息数据将非常低效。
然而,值得注意的是,ActiveMQ Artemis 日志文件在创建时初始化为零,这意味着即使是“空”日志也会占用磁盘空间。因此,当消息存储在日志中时,它们占用的磁盘空间量不会改变。现有的零将简单地被消息数据覆盖。
您可以在 GitHub 上找到 ActiveMQ Artemis 的源代码。
如果您想查看此行为的证据,您可以使用该artemis data print
命令。此命令以人类可读的格式打印来自日志的原始记录。如果您有 2 个持久订阅,使用客户端 IDdurable-client1
和durable-client2
订阅名称和订阅名称subscriber-1
分别subscriber-2
在名为的 JMS 主题上exampleTopic
发送一条消息,您最终会得到一个地址、2 个队列、1 条实际消息和 2 个日志中的引用. data print
您会在命令输出中看到类似这样的内容:
********************************************
B I N D I N G S J O U R N A L
********************************************
...
### Surviving Records Summary ###
...
recordID=2;userRecordType=44;isUpdate=false;compactCount=0;PersistentAddressBindingEncoding [id=2, name=exampleTopic, routingTypes={MULTICAST}, autoCreated=false]
recordID=18;userRecordType=21;isUpdate=false;compactCount=0;PersistentQueueBindingEncoding [id=18, name=durable-client1.subscriber-1, address=exampleTopic, filterString=null, user=null, autoCreated=false, maxConsumers=-1, purgeOnNoConsumers=false, exclusive=false, lastValue=false, lastValueKey=null, nonDestructive=false, consumersBeforeDispatch=0, delayBeforeDispatch=-1, routingType=0, configurationManaged=false, groupRebalance=false, groupBuckets=-1, groupFirstKey=null, autoDelete=false, autoDeleteDelay=0, autoDeleteMessageCount=0]
recordID=23;userRecordType=21;isUpdate=false;compactCount=0;PersistentQueueBindingEncoding [id=23, name=durable-client1.subscriber-2, address=exampleTopic, filterString=null, user=null, autoCreated=false, maxConsumers=-1, purgeOnNoConsumers=false, exclusive=false, lastValue=false, lastValueKey=null, nonDestructive=false, consumersBeforeDispatch=0, delayBeforeDispatch=-1, routingType=0, configurationManaged=false, groupRebalance=false, groupBuckets=-1, groupFirstKey=null, autoDelete=false, autoDeleteDelay=0, autoDeleteMessageCount=0]
...
********************************************
M E S S A G E S J O U R N A L
********************************************
...
### Surviving Records Summary ###
recordID=27;userRecordType=45;isUpdate=false;compactCount=0;Message(messageID=27;userMessageID=41705395-b2d1-11e9-91f9-a0afbd82eaba;msg=CoreMessage[messageID=27,durable=true,userID=41705395-b2d1-11e9-91f9-a0afbd82eaba,priority=4, timestamp=Tue Jul 30 08:52:22 CDT 2019,expiration=0, durable=true, address=exampleTopic,size=232,properties=TypedProperties[__AMQ_CID=durable-client1,_AMQ_ROUTING_TYPE=0]]@454305524
recordID=27;userRecordType=32;isUpdate=true;compactCount=0;AddRef;QueueEncoding [queueID=18]
recordID=27;userRecordType=32;isUpdate=true;compactCount=0;AddRef;QueueEncoding [queueID=23]
...