Один производитель, несколько очередей блокировки, несколько потребителей - PullRequest
1 голос
/ 24 апреля 2020

Architecture

Производитель просматривает каждый тип сообщения и маршрутизирует к любому ArrayBlockingQueue в зависимости от наличия места в этом Queue. Существует только два типа сообщений Тип 1 или Тип 2. Данная очередь может содержать только один тип сообщения. Я хочу построить систему, которая может иметь «m» очереди, где некоторые из них будут содержать сообщения типа 1, а остальные будут содержать сообщения типа 2. Теперь каждая очередь может иметь одного или нескольких потребителей, читающих из нее. Отображение Queue для потребителя составляет 1: n. Каждый потребитель будет потреблять ровно 1 очередь.

Теперь мне нужна следующая функциональность:

  1. Если в ней есть хотя бы одна очередь с пробелом, производитель должен put() отправить сообщение в эту очередь. Производитель должен заблокировать put(), только если все очереди заполнены.
  2. Пока в очереди есть сообщение, все потребители, ожидающие в данной очереди, должны иметь возможность take() из очереди и получать собственное сообщение.
  3. Никакие сообщения не должны обрабатываться несколькими потоками потребителей.

Возможно ли это и элегантно с ArrayBlockingQueue? Или есть лучшее решение для этой проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...