在使用 Disruptor 时,可能会有一个消费者落后,并且由于该消费者速度缓慢,整个应用程序都会受到影响。
请记住,每个生产者(发布者)和消费者(EventProcessor)都在单个线程上运行,那么如何解决消费者缓慢问题呢?
我们可以在单个消费者上使用多个线程吗?如果没有,什么是更好的选择?
一般来说,使用 WorkerPool 允许多个池工作线程在单个使用者上工作,如果您有独立且持续时间可能可变的任务(例如:一些短任务,一些长任务),那么这很好。
另一种选择是让多个独立的工作线程并行处理事件,但每个工作线程仅处理模 N 的工作线程(例如,2 个线程,一个线程处理奇数事件 ID,一个线程处理偶数事件 ID)。如果您有一致的持续时间处理任务,并且允许批处理也非常有效地工作,那么这非常有用。
另一件需要考虑的事情是消费者可以进行“批处理”,这在审计等方面特别有用。如果您的使用者有 10 个事件正在等待,您可以收集所有 10 个事件并同时写入,而不是将 10 个事件单独写入审核日志。根据我的经验,这不仅仅涵盖了运行多个线程的需要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)