Я думаю, что вы пытаетесь использовать шаблон экстендера неправильно. Одной из ключевых характеристик является то, что шаблон расширителя является статическим по своей природе: все происходит, когда установлен пакет. Кажется, что это не ваш случай: наличие нескольких очередей для одной и той же реализации заставляет меня думать, что за этими очередями есть службы. Количество сервисов может меняться динамически, поэтому расширитель не сможет вам в этом помочь.
Я думаю, было бы лучше, если бы вы использовали Шаблон доски . (Не обращайте внимания на тот факт, что он нацелен на механизм слушателей). Идея состоит в том, что каждый пакет предоставляет сервис, который может обрабатывать ваши запросы. Вы отслеживаете все доступные услуги, используя ServiceTacker
. Когда вам нужно обработать запрос, вы перебираете все доступные сервисы и спрашиваете их, свободны ли они (вы можете решить это внутренне и не согласовывать это с реализациями сервиса). Когда бесплатная услуга найдена, вы пересылаете запрос.
Вы можете сгруппировать службы, зарегистрировав их с помощью свойства 'type' и соответствующего значения, чтобы вы могли использовать службы с типом 'HotDog' и службы с типом 'Popcorn'.
Если вы пойдете по этому пути, вы можете использовать декларативные сервисы OSGi, поэтому вам не нужно писать код, который выполняет регистрацию сервиса или любое другое управление сервисом.