我对LMAX Disruptor的理解是,它是一个JAR,充满了快速,可怕的并发Java代码,每秒可以处理2000万条消息(如果正确使用)。
当前,我们有一个ActiveMQ实例,对于我们所需的实例而言,它的运行速度很慢,每秒大约有400条消息。我想知道我们是否可以受益于将代码重构为使用LMAX,但存在以下问题:
如何拥有1个发布者和多个(竞争)消费者
LMAX如何存储/容纳其消息?在记忆中?
故障转移-LMAX是否具有故障转移协议/机制
磁盘I / O-LMAX可以将未使用的消息保留到磁盘上并在以后恢复它们吗?
而且,如果我完全不了解所有这些内容,并且似乎完全误解了LMAX Disruptor的使用,那么有人可以提供何时使用它的具体示例吗?提前致谢!
最佳答案
Disruptor不能直接替代跨进程或跨服务器的消息传递系统。它被设计为进程内跨线程消息传递系统。认为替换处理线程之间通常具有队列的依赖关系图很有用。这对于在线程之间使用管道或多播模式的设计很有用。 ActiveMQ的目的不同。
基于Disruptor的系统中的线程更像是长期存在的Actor,它们通过通过Disruptor传递事件进行通信。
有关一些好的示例,请查看源代码中提供的性能测试。