Шаблон расширения OSGi с расширениями для балансировки нагрузки - PullRequest
1 голос
/ 23 февраля 2011

Я хотел бы реализовать следующий сценарий:

Расширитель использует свои расширения, в то время как расширения группируются по их типу.Например: Extender = Vendor и Extensions = HotDogSeller1, HotDogSeller2, PopcornSeller.Я хочу сказать, что клиент (клиент) хочет купить либо HotDogs, либо Popcorns, однако он выберет менее загруженный HotDogSeller (меньшая очередь).

Я новичок в OSGi, поэтому я хотел бы спросить, каковы наилучшие методы для реализации этого?Я полагаю, я мог бы использовать Apache Felix с iPojo (и это шаблон расширения ).С этим связаны 2 проблемы:

Один и тот же пакет должен быть установлен дважды (реализация hotdog, у каждого своя собственная длина очереди) Каким-то образом группировать пакеты одного типа (горячие собаки), попкорн).Это можно сделать, создав свойство для пакета с некоторым ключом, например, «число», для различных HotDogSeller1 и HotDogSeller2)

1 Ответ

1 голос
/ 05 июля 2011

Я думаю, что вы пытаетесь использовать шаблон экстендера неправильно. Одной из ключевых характеристик является то, что шаблон расширителя является статическим по своей природе: все происходит, когда установлен пакет. Кажется, что это не ваш случай: наличие нескольких очередей для одной и той же реализации заставляет меня думать, что за этими очередями есть службы. Количество сервисов может меняться динамически, поэтому расширитель не сможет вам в этом помочь.

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

Вы можете сгруппировать службы, зарегистрировав их с помощью свойства 'type' и соответствующего значения, чтобы вы могли использовать службы с типом 'HotDog' и службы с типом 'Popcorn'.

Если вы пойдете по этому пути, вы можете использовать декларативные сервисы OSGi, поэтому вам не нужно писать код, который выполняет регистрацию сервиса или любое другое управление сервисом.

...