我对有关日记步骤的最常见(或推荐)的disruptor实现感到好奇。我最常见的问题是:
顺便说一下(对不起,我知道这与日志记录步骤无关),在eventHandler进程中从RingBuffer中删除消息的正确方法是什么(假设消息已死/过期,应该被整个程序删除)。我想知道与Dead Letter Channel模式类似的东西。
干杯!
答案 0 :(得分:5)
Disruptor通常用于低延迟,高吞吐量处理。例如。数百万条消息的典型延迟在数百微秒内。由于极少数数据库可以通过合理限制的延迟来处理这种更新速率,因此通常会对原始文件执行日记记录,并将其复制到第二个(或第三个)系统。
出于报告目的,系统会读取此文件或侦听消息并尽快更新数据库,但这会从关键路径中删除。
当每个事件处理器处理完条目时,环形缓冲区中的条目已经死亡。
消息使用的插槽在每个事件处理器处理完之前以及之前的所有消息之前都不可用。在性能和对设计的影响方面,删除消息的成本太高了
每个事件处理器都会看到每条消息。由于这种情况同时发生,这样做的成本很低,但事件处理器忽略消息是很正常的。 (可能是大多数消息)