2009-06-23 3 views
0

У меня есть 2 сообщения, управляемые bean-компонентами. 2 для этих компонентов. У меня есть одна шина сообщений, и оба варианта активации настроены на эту одну шину. У меня есть две разные очереди и одна фабрика соединений в очереди, настроенная для этой одной шины сообщений.Message Driven Beans - Single Bus, множественные характеристики активации

Теперь я хотел бы написать свой код для отправки сообщения в одну из очередей во время выполнения после определения очереди. Однако оба моих MDB получают одно и то же сообщение. Как эта конфигурация выполнена вообще? Всегда ли настраиваю 1 очередь -> 1 Factory Queue Factory -> 1 шина сообщений -> 1 MDB? Все ли отношения «один к одному»?

О, я забыл упомянуть об этом: Я использую WebSphere Application Server V6.1,

ответ

3

В целом концепция такова:

  1. посылается сообщение (Очередь)/опубликовано (Тема) до пункта назначения (Очередь/Тема)
  2. ActivationSpec прослушивает сообщения на определенный destintation (Queue/Topic)
  3. ActivationSpec: Назначение: отношение 1: 1
  4. Боб (MDB, являющийся потребителем) настроен на прослушивание ActivationSpec.

Это означает, что бонус связан с местом назначения со слоем косвенности, предоставляемым активациейSpec.

Где находится автобус - SIBus - это инфраструктура обмена сообщениями, которая делает все это возможным. Направления размещаются на автобусе.

Приходит к вопросу - ActivationSpec будет настроен на прослушивание адресата на шине, на которую будут отправляться сообщения. Фабрика соединений определяет шину, на которую будет отправлено сообщение. Пока имя адресата уникально и нацелено на определенную очередь (JMS Queue привязана к месту назначения на шине), одно сообщение будет получено только одним ActivationSpec.

Сколько мест назначения (под ссылкой SIBus в консоли администратора WAS) было создано на шине? Не могли бы вы проверить/подтвердить правильность конфигурации?

, чтобы ответить на ваши вопросы - «Это одна шина на каждую спецификацию активации и одну фабрику соединений очереди в очереди». - ответ - нет.

  1. Автобус является базовой инфраструктурой, в которой могут размещаться «n» пункты назначения. Один ActivationSpec прослушивает один пункт назначения.
  2. С фабрикой соединений очереди является фабрикой (заводской шаблон J2EE) для создания очередей.
1

Я думаю, что вы хотите сказать, что вы хотите, чтобы оба МБР получить такое же сообщение, не так ли?

Если это так, то МБР следует слушать тему а не очереди.

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

1

Зачем вам нужен автобус сообщений?

Обычно я связываю MDB с очередью - это соотношение 1: 1. Отправьте сообщение в очередь, слушатель получит его. Что вы покупаете на автобусе?

Я сделал JMS с WebLogic, и нет такой конструкции, как требуется для шины сообщений. Я думаю, что это дело IBM.

Here's пример того, как сделать JMS с весной. Вот как я рекомендую продолжить.

ОБНОВЛЕНИЕ: Я неверно истолковал ваш вопрос. Когда вы сказали, что обе ваши очереди получили одно и то же сообщение, я не думал, что это было желаемое поведение. Если это так, то темы - правильный путь. Очереди - это обмен сообщениями точка-точка; темы публикуются/подписываются.

+0

@duffymo Действительно, это вещь IBM. И, нет, я не хотел сказать, что обе очереди, получающие одно и то же сообщение, являются желаемым поведением. Мы говорим о двух разных очередях и разных сообщениях. Вопрос был: всегда ли это одна шина на каждую спецификацию активации и одну фабрику соединений очереди в очереди. Все ли отношения 1-1-1, если я должен отправить сообщение в одну очередь и забрать его с помощью MDB? – Jay

+0

Да, это то, что означает точка-точка, воплощенная в очередях. Как сказал Ник Холт, если вы хотите, чтобы несколько подписчиков имели доступ к одному и тому же сообщению, вы должны использовать тему вместо очереди. – duffymo

1

Я подозреваю, что конфигурация, которую у вас есть, не настроена так, как вы думаете. Мы используем ту же конфигурацию, о которой вы описали, с множеством MDB (с указанием очереди и активации), единой фабрикой и шиной сообщений, и все работает так, как ожидалось.

Чтобы получить поведение, которое вы видите, на самом деле невозможно, если вы не отправляете одно и то же сообщение в обе очереди или не определяете тему вместо очереди. Я уверен, что даже если оба MDB читают из одной очереди, только одно получит сообщение, поскольку очередь поддерживает только обмен сообщениями точка-точка. То, что вы описали, - это поведение на основе темы.

+0

@Robin Я предполагаю, что это связано с тем, что оба активационных спецификаций для двух MDB используют одну и ту же шину. – Jay

+0

@Jay - Нет. Эта часть конфигурации в порядке. Нет ничего плохого в одной шине и нескольких очередях. У нас такой сценарий, и он отлично работает. Это просто конфигурация IBM и не изменяет ожидаемое поведение JMS. – Robin