是否有任何方法可以使RabbitMQ队列表现为堆栈,即客户端获得队列中发布的最后一条消息(LIFO),而不是第一条消息?还是可以使用客户端可以设置的时间戳使其成为优先级队列?
RabbitMQ确实支持优先级队列,但是它允许的优先级只是一个最多255的数字(建议最多使用10)。
我想要实现的是,首先处理最新消息,因为它们包含有关源的最新信息。我仍然想处理旧消息,但是在客户端无法跟上(或出现一些停机时间并且客户端正在恢复)的情况下,我想首先处理最新的状态信息。
到目前为止,我唯一想到的解决方案是在主队列的消息上使用TTL,并在它们到期时将它们转到死信队列,这也由客户端处理。但是,这不是很干净,并且如果消息的源花费的时间比TTL更长的时间来发送新的状态更新,则最新状态将在队列中停留在其他尚待处理的较旧过期消息后面。
如果无法使用RabbitMQ实现,是否有其他推荐的消息传递框架可以支持此要求?
Kafka Log Compaction正是为您描述的用例创建的:
日志压缩可确保Kafka始终至少保留最后一个单个数据日志中每个消息键的已知值主题分区。它解决了用例和场景,例如应用程序崩溃或系统故障后恢复状态,或者在操作过程中重新启动应用程序后重新加载缓存保养。让我们更详细地研究这些用例,然后描述压缩的工作原理。