0

Im читает pdf tib_ems_user_guide.pdf для подготовки к предстоящему проекту (проект на TIBCO ESB). Я получил не дальше, чем введение, когда я столкнулся с тем, что я воспринимал как противоречие. Я понял, что не понимаю эту концепцию. (Я читал немного дальше в нее и не смогли найти ответы)Публикация и подписка Система обмена сообщениями «Общая подписка» Пояснение (TIBCO EMS)

Начиная с Ch1 (PG4) под публикации и подписки раздела I переговоры об «общих подписок»:

Shared подписки созданный с определенным именем и, возможно, идентификатор клиента. Потребители, которые подписывают подписку, указывают это имя при подписке на эту тему.

Например, тема Foo может иметь следующие подписки:

• не разделяет, недлительная подписку.

• не поделил, долговечны подписки

• совместно, недлительная подписки под названием mySharedSub с тремя совместно потребителей

• общие, долговечная подписку под названием myDurableSharedSub с двумя общими потребителями

Если сообщение принимается по foo, каждый из этих четырех подписей получает это же сообщение. Для общих подписей mySharedSub и myDurableSharedSub сообщение доставляется только одному, если его соответствующие общие потребители.

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

Мои вопросы ...

  1. Что такое точка "speceific имя" для подписки. Разве вам не нужна каждая подписка в теме, чтобы иметь какое-то конкретное имя, чтобы вы могли ссылаться на нее при подписке на нее? Или больше вы подписываетесь на тему, и она будет систематически определять, какую подписку подписывать, если вы не укажете.
  2. Что бы сделал идентификатор клиента?
  3. Почему подписка под названием «shared» только доставляет свои сообщения одному из ее потребителей? Это кажется мне обратным.

Спасибо за вашу помощь,

Mingman

ответ

1

Обратите внимание, что понятия применимы к JMS в целом, а не только TIBCO EMS. Позвольте мне начать с последнего вопроса.

Предположим, у вас есть система, передающая сообщения о новых заказах, входящих в тему. Затем вы скажете две другие системы, каждая из которых работает на одной машине в виде единого процесса, которые должны получить это сообщение: «Оплата и выполнение». Каждая система будет подписана с не-общей подпиской (прочная, поскольку вы не хотите потерять заказы).

Теперь рассмотрите, что происходит, когда вы должны масштабировать систему биллинга горизонтально. Теперь он работает на двух серверах, по одному процессу на каждом, который мы будем называть Billing1 и Billing2. Если Fulfillment, Billing1 и Billing2 будут подписываться на каждую из них без общей подписки, оба Billing1 и Billing2 получат каждый заказ. Это, однако, не то, что вы хотите, так как теперь каждый заказ будет в основном просто выставлен счет дважды. Скорее всего, вы хотите, чтобы заказы отправлялись в чередующемся (или иначе сбалансированном по нагрузке) способе Billing1 и Billing2. Для этого вы можете использовать общую подписку. Теперь вы получите бесплатную подписку на Fulfillment и общую подписку (назовем ее «BillingSubscription») для Billing1 и Billing2. Сообщение первого порядка теперь будет направлено на Выполнение и Биллинг1, сообщение второго порядка будет направлено на Выполнение и Биллинг2 и т. Д.

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

В первую очередь вам нужно указать конкретное имя подписки, чтобы узнать, какие системы принадлежат к общей подписке. Billing1 и Billing2 используют подписку, используя одно и то же имя подписки при создании подписки на эту тему. Предположим, что теперь вы подключаете системы Inventory, запущенные как три процесса Inv1, Inv2, Inv3, и к вашей теме. Для этого вы использовали бы другое имя подписчика (например, «InventorySubscription»).

Идентификатор клиента используется, чтобы узнать, получил ли клиент сообщение или нет (для случая, когда клиент отключен при отправке сообщения, но другие клиенты могут быть в сети). Обратите внимание, что идентификатор clientID установлен в соединении (и соединение может управлять многими подписками на темы и очереди). Если вы используете только общие подписки, это не так полезно, насколько я понимаю. Но скажите, что у вас есть соединение, содержащее простую общую подписку на тему1 и долговременную несвязанную подписку на тему2, тогда идентификатор клиента будет использоваться для обеспечения получения сообщений в Topic2, даже если вы некоторое время выходите в автономный режим.

Смежные вопросы