Очереди JMS, для которых требуется селектор - PullRequest
2 голосов
/ 20 сентября 2011

Я хочу внедрить JMS-очередь, чтобы каждое сообщение доставлялось только одному потребителю. При прослушивании очереди будет много разных типов потребителей. У сообщений должны быть установлены свойства, определяющие тип требуемой работы, и они используются селектором потребителей, чтобы гарантировать, что они получают только отправленную работу, которую они могут обработать.

У меня вопрос: как я могу убедиться, что, когда потребитель регистрируется в очереди в качестве потребителя, он реализует селектор, чтобы избежать следующего сценария.

Если у меня есть 3 типа сообщений (A, B и C) и 3 потребителя (a, b и c), каждый из которых потребляет только 1 тип сообщения следующим образом: a-> A b-> B c-> C, тогда все сообщения типа A будут отправлены 1, все сообщения типа B будут отправлены 2 и т. д.

Я хочу запретить кому-либо регистрировать нового потребителя (d), у которого нет селектора, потому что этот потребитель будет означать, что сообщения типа A, B, C теперь будут отправляться их предполагаемому потребителю или, возможно, потребителю d.

В качестве альтернативы, я бы хотел, чтобы очередь отдавала предпочтение потребителям, у которых есть селектор, совпадающий с потребителем без селектора.

Ps. Список возможных потребителей и типов сообщений является динамическим и не находится под моим контролем, поэтому у меня нет очереди для каждого типа сообщений.

1 Ответ

1 голос
/ 26 октября 2011

Вы не можете достичь этого на уровне реализации JMS API.Я думаю, что вам лучше всего установить ограничения безопасности для очереди в брокере, например, ввести имя пользователя / пароль, которые ваше приложение должно предоставить для чтения очереди, и это будет знать только ваше приложение.Проконсультируйтесь с вашим провайдером JMS, как это сделать, это стандартная функция для любого серьезного провайдера JMS.

У меня такое ощущение, что вы этого не хотите по соображениям безопасности, но из-за стабильности, вашего собственного спокойствия.или "на всякий случай".Возможно, вам придется убедить любого, кто будет управлять очередями в вашей компании, в этом оправдано.

...