Производитель просматривает каждый тип сообщения и маршрутизирует к любому ArrayBlockingQueue
в зависимости от наличия места в этом Queue
. Существует только два типа сообщений Тип 1 или Тип 2. Данная очередь может содержать только один тип сообщения. Я хочу построить систему, которая может иметь «m» очереди, где некоторые из них будут содержать сообщения типа 1, а остальные будут содержать сообщения типа 2. Теперь каждая очередь может иметь одного или нескольких потребителей, читающих из нее. Отображение Queue
для потребителя составляет 1: n. Каждый потребитель будет потреблять ровно 1 очередь.
Теперь мне нужна следующая функциональность:
- Если в ней есть хотя бы одна очередь с пробелом, производитель должен
put()
отправить сообщение в эту очередь. Производитель должен заблокировать put()
, только если все очереди заполнены. - Пока в очереди есть сообщение, все потребители, ожидающие в данной очереди, должны иметь возможность
take()
из очереди и получать собственное сообщение. - Никакие сообщения не должны обрабатываться несколькими потоками потребителей.
Возможно ли это и элегантно с ArrayBlockingQueue
? Или есть лучшее решение для этой проблемы?