Компоненты, управляемые сообщениями - одна шина, множественные спецификации активации
-
06-07-2019 - |
Вопрос
У меня есть 2 компонента, управляемых сообщениями. 2 Спецификации активации для этих бобов. У меня есть одна шина сообщений, и обе спецификации активации настроены на эту шину. У меня есть 2 разные очереди и одна фабрика соединений очереди, настроенная для этой одной шины сообщений. Р>
Теперь я бы написал свой код для отправки сообщения в одну из очередей во время выполнения после определения очереди. Однако оба моих MDB получают одно и то же сообщение. Как эта конфигурация вообще делается? Всегда ли я настраиваю 1 очередь - > 1 фабрика соединений в очереди - > 1 шина сообщений - > 1 МБ? Это все отношения один-к-одному? Р>
О, я забыл упомянуть об этом: я использую Websphere Application Server v6.1
Решение
В общем, концепция такова:
<Ол>Это означает, что в действительности бин связан с пунктом назначения со слоем косвенности, предоставляемым ActivationSpec. Р>
Откуда приходит шина - SIBus - это инфраструктура обмена сообщениями, которая делает все это возможным. Направления размещаются на автобусе.
Переходя к вопросу - ActivationSpec будет настроен на прослушивание пункта назначения на шине, на которую будут отправляться сообщения. Фабрика соединений решает шину, на которую будет отправлено сообщение. Пока имя получателя является уникальным и предназначено для определенной очереди (очередь JMS связана с пунктом назначения на шине), одно сообщение будет получено только одним ActivationSpec. Р>
сколько мест назначения (по ссылке SIBus в консоли администратора WAS) было создано на шине? Не могли бы вы проверить / проверить правильность конфигурации?
чтобы ответить на ваши вопросы - "Это одна шина на спецификацию активации и одна фабрика соединений с очередью на очередь. " - ответ НЕТ.
<Ол>Другие советы
Я думаю, вы говорите, что хотите, чтобы оба MDB получали одно и то же сообщение, верно?
Если это так, то MDB должны слушать тему , а не очередь .
В качестве альтернативы, вы можете настроить IBM MQ для пересылки сообщений, например, сообщение, отправленное в определенную очередь , может быть повторно отправлено в n другой < em> queues , но я видел только то, что использовалось, когда какое-то обогащение сообщений происходит перед повторной публикацией, и поэтому я подозреваю, что это излишне для того, чего вы пытаетесь достичь.
Зачем вам нужна шина сообщений? Р>
Обычно я связываю MDB с очередью - это отношение 1: 1. Отправьте сообщение в очередь, слушатель получит его. Какой автобус покупает тебя? Р>
Я сделал JMS с WebLogic, и такой конструкции, как шина сообщений, не требуется. Я думаю, что это вещь IBM. Р>
Вот пример того, как сделать JMS с помощью Spring. Вот как я бы рекомендовал продолжить.
ОБНОВЛЕНИЕ: я неверно истолковал ваш вопрос. Когда вы сказали, что обе ваши очереди получают одно и то же сообщение, я не думал, что это желаемое поведение. Если это так, то темы - правильный путь. Очереди - это обмен сообщениями точка-точка; темы публикуются / подписываются.
Я подозреваю, что ваша конфигурация настроена не так, как вы думаете. Мы используем ту же конфигурацию, которую вы описали, со многими MDB (с очередью и спецификацией активации), единой фабрикой и шиной сообщений, и все работает как положено.
Получить поведение, которое вы видите, на самом деле невозможно, если вы не отправите одно и то же сообщение в обе очереди или не определите тему вместо очереди. Я уверен, что даже если оба MDB читают из одной и той же очереди, сообщение получит только один, поскольку очередь поддерживает только двухточечную передачу сообщений. То, что вы описали, - это поведение, основанное на темах.