Использование Websphere MQ Topic .NET API - PullRequest
6 голосов
/ 23 декабря 2010

Я прочитал эту статью

И до сих пор не понял, как работают темы в MQ. В JMS я знаю, что вы можете опубликовать сообщение в теме, и для того, чтобы получить от него сообщение, вам сначала нужно подписаться на него (используя имя подписки на этапе получения).

Как это работает в MQ? Я хочу написать простой сценарий (как в JMS):

1. Опубликовать в теме 2. Получение из темы - это не удастся (я еще не подписан) 3. Подписаться 4. Получать - нечего получать, так как я подписался после публикации 5. Опубликовать 6. Получите - успешно

Пример кода (.NET) будет полезен

Guy

1 Ответ

7 голосов
/ 23 декабря 2010

Вы смотрели на пример кода? При установке по умолчанию он находится по адресу:
C:\Program Files\IBM\WebSphere MQ\tools\dotnet\samples

Программа MQPubSubSample.cs иллюстрирует как долговременные, так и недолговечные подписки на управляемый и неуправляемый код. В каждом случае он сначала подписывается, затем публикуется, но вы можете легко изменить его в соответствии с вашим вариантом использования публикации / подписки / получения / публикации / получения, как описано в вопросе. (Вы не сможете получать сообщения из темы, на которую еще не подписались.)

Вот один из разделов из примера кода:

  // Managed/nondurable
  string topicName = DEFAULT_TOPIC_STRING;
  string topicObject = null;
  int openOptionsForGet = MQC.MQSO_CREATE | MQC.MQSO_FAIL_IF_QUIESCING | MQC.MQSO_MANAGED | MQC.MQSO_NON_DURABLE;
  int destType = MQC.MQOT_TOPIC;

  try
  { 
    destForGet = mqQMgr.AccessTopic(topicName, topicObject, MQC.MQTOPIC_OPEN_AS_SUBSCRIPTION, openOptionsForGet);

    messageForPut = new MQMessage();
    messageForPut.WriteString(DEFAULT_MESSAGE_DATA);

    mqQMgr.Put(destType, topicObject, null, topicName, messageForPut);

    messageForGet = new MQMessage();

    destForGet.Get(messageForGet);

    string messageDataFromGet = messageForGet.ReadLine();

    if(!DEFAULT_MESSAGE_DATA.Equals(messageDataFromGet))
      Console.WriteLine("Incorrect Message Received.");

    destForGet.Close();
  }
  catch(MQException mqE)
  {
    Console.WriteLine("MQException caught. " + mqE.ToString());
  }

Ваш вопрос ссылается на JMS в качестве примера. Помните, что у вас есть возможность использовать IBM XMS - Extensible Message Service Client для .Net. XMS реализует JMS API через .Net с WMQ, WMB или WAS в качестве транспорта, так что вы можете использовать код JMS с минимальными изменениями. Клиент службы сообщений для .Net 2.0.0 , руководство описывает предложение :


Клиент службы сообщений для .NET
Клиент службы сообщений для .NET предоставляет интерфейс прикладного программирования (API) под названием XMS, который имеет тот же набор интерфейсов, что и API службы сообщений Java (JMS). Клиент службы сообщений для .NET содержит полностью управляемую реализацию XMS, которая может использоваться любым языком, совместимым с .NET. XMS поддерживает:

  • обмен сообщениями в стиле «точка-точка»
  • обмен сообщениями в стиле публикации / подписки
  • Синхронная доставка сообщений
  • Асинхронная доставка сообщений

Приложение XMS может обмениваться сообщениями со следующими типами приложений:

  • Приложение XMS
  • Приложение WebSphere MQ JMS
  • Собственное приложение WebSphere MQ
  • Приложение JMS, которое использует поставщика сообщений WebSphere по умолчанию

Приложение XMS может подключаться и использовать ресурсы любого из следующих серверов обмена сообщениями:

  • Администратор очередей WebSphere MQ. Приложение может подключаться как в режиме привязок, так и в режиме клиента.
  • Шина интеграции служб WebSphere. Приложение может использовать прямое соединение TCP / IP или HTTP по TCP / IP.
  • Брокер WebSphere Event Broker или WebSphere Message Broker - сообщения передаются между приложением и брокером с помощью WebSphere MQ Real-Time Transport и, в зависимости от конфигурации, сообщения могут доставляться в приложение с помощью WebSphere MQ Multicast Transport.

При подключении к администратору очередей WebSphere MQ приложение XMS может использовать WebSphere MQ Enterprise Transport для связи с брокером WebSphere Event Broker или WebSphere Message Broker. В качестве альтернативы, приложение XMS может использовать брокера публикации / подписки WebSphere MQ.


Если вы хотите продолжить изучение, образец кода XMS находится в подкаталогах ниже собственных примеров .Net, упомянутых ранее. Образцы описаны в разделе Использование примеров приложений XMS данного руководства.

Поддержка .Net интегрирована в WMQ начиная с v7. Если вам не хватает примеров, значит, ваша клиентская установка WMQ находится на обратном уровне или установлена ​​не полностью. Последняя версия WMQ-клиента v7.0 для Windows доступна для загрузки под SupportPac MQC7 .

Поддержка XMS поставляется в виде SupportPac IA9H .

...