Зависимости между сообщениями в потоках в Distruptor
У нас есть сценарий в Disruptor, где есть несколько потребителей (скажем, 2) и несколько производителей (скажем, 3), и между ними есть RingBuffer.
Потребители читают и пишут в базу данных и работают медленно. Некоторые сообщения зависят друг от друга (например, #10 зависит от #4) и могут создаваться разными производителями. № 10 не должен обрабатываться Потребителем 1 или Потребителем 2 до тех пор, пока № 4 не закончится. Используя RingBuffer, как это можно сделать? Мы явно хотим избежать замков.
- Должен ли производитель (P1) дождаться получения соответствующего сообщения, прежде чем поместить это сообщение в RingBuffer? Можно ли этого достичь без использования замков?
- Должно ли сообщение быть "пакетным"? Есть ли способ сделать это?
- Есть ли лучший подход с использованием Disruptor?
Подходит ли этот вариант использования для шаблона Distruptor? Может ли кто-нибудь помочь мне с примером?