Ну, это не очень хороший пример, но (в самом простом дизайне) у вас в основном было бы две очереди, и (в зависимости от количества задействованных данных) вы могли бы опустить базу данных.
Первый процесс получает ваши a
объекты из «внешнего мира» и помещает их в очередь 1. Очередной процесс удаляет объекты из очереди 1, выполняет computeB
и помещает результаты в очередь 2. Третийпроцесс будет исключать объекты из очереди 2, выполнять computeC
и регистрировать результат или что-то в этом роде.
В зависимости, как я уже сказал, от количества задействованных данных (и, возможно, нескольких других факторов) «объекты»передаваемые в очереди могут быть вашими фактическими объектами a
и b
или просто токенами / ключами для поиска данных в базе данных.
Сами очереди могут быть реализованы несколькими способами.Можно реализовать очередь с базой данных, например, хотя детали становятся немного запутанными.«Процессы» могут быть задачами Java внутри одного процесса Java или могут быть отдельными процессами ОС, возможно, даже на отдельных машинах.
Когда вы используете «каналы» в Unix, вы эффективно используете очереди таким образом.