Apache ActiveMQ Artemis 日志记录解释

Apache ActiveMQ Artemis journal record explanation

因此,我丢失了一些来自 Apache Active MQ Artemis 的消息(有关更多信息,我之前的问题位于此处 )。

查看日志记录后,我看到了这些与丢失消息相关的条目 (recordID=1094612593)。我可以从这些条目中推断出什么。它们对进一步的故障排除有帮助吗?

operation@AddRecordTX;txID=1094612560,recordID=1094612593;userRecordType=45;isUpdate=false;compactCount=0;Message(messageID=1094612593;userMessageID=aa844c3f-1c6e-11ec-840c-005056be4b8b;msg=CoreMessage[messageID=1094612593,durable=true,userID=aa844c3f-1c6e-11ec-840c-005056be4b8b,priority=4, timestamp=Thu Sep 23 16:03:37 EEST 2021,expiration=0, durable=true, address=[===myQueue===],size=1277,properties=TypedProperties[===PROPERTIES==]]@1335046207

operation@UpdateTX;txID=1094612540,recordID=1094612663;userRecordType=32;isUpdate=true;compactCount=0;AddRef;QueueEncoding [queueID=7]
operation@UpdateTX;txID=1094612655,recordID=1094612663;userRecordType=33;isUpdate=true;compactCount=0;ACK;QueueEncoding [queueID=7]
operation@DeleteRecord;recordID=1094612663

P.s

我试图重现丢失的情况,但无济于事。

这里的数据是不确定的,因为记录之间没有直接关系。让我们一一看每条记录...

operation@AddRecordTX;txID=1094612560,recordID=1094612593;userRecordType=45;isUpdate=false;compactCount=0;Message(messageID=1094612593;userMessageID=aa844c3f-1c6e-11ec-840c-005056be4b8b;msg=CoreMessage[messageID=1094612593,durable=true,userID=aa844c3f-1c6e-11ec-840c-005056be4b8b,priority=4, timestamp=Thu Sep 23 16:03:37 EEST 2021,expiration=0, durable=true, address=[===myQueue===],size=1277,properties=TypedProperties[===PROPERTIES==]]@1335046207

这是包含实际消息数据(即 body 和属性 & headers)的“添加消息”记录。此记录的 ID(即 1094612593)将被与此消息相关的其他记录引用。

operation@UpdateTX;txID=1094612540,recordID=1094612663;userRecordType=32;isUpdate=true;compactCount=0;AddRef;QueueEncoding [queueID=7]

这是一条“添加参考”记录。由于单个消息实际上可以在多个 queue 上(例如,在 JMS 主题的多个订阅中),消息数据不会每次都重复。而是将“ref”添加到每个 queue(即本例中的 queueID=7),并且每个“ref”指向实际消息的 ID(即此处的 1094612663)。在这种情况下 10946126631094612593 的“添加消息”记录 ID 不匹配,因此这些日记条目与 2 条不同的消息相关。

operation@UpdateTX;txID=1094612655,recordID=1094612663;userRecordType=33;isUpdate=true;compactCount=0;ACK;QueueEncoding [queueID=7]

这是一条“确认”记录,表示一条消息已被确认。消息可以由客户端确认(例如在正常消费期间),也可以通过管理方式确认(例如在通过管理 API 的删除操作期间)。

operation@DeleteRecord;recordID=1094612663

这是一条“删除”记录,一旦一条消息的所有“参考”都得到确认,它就会被添加到日志中。 recordID 指回原来的“添加消息”记录。

稍后在称为“压缩”的过程中,将清除所有删除记录以及它们引用的记录,包括 ref 和 ack 记录。这样,可以释放日志文件中可用的 space 和 re-used.