powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Получение тела сообщения из сообщения формата MQHRF2
4 сообщений из 4, страница 1 из 1
Получение тела сообщения из сообщения формата MQHRF2
    #38845819
ZooY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На .NET с помощью библиотеки amqmdnet.dll получаю сообщение из MQ.
Сообщение поступает в формате MQHRF2. Т.е. я на выходе получаю строку, представляющую собой XML-файл с заголовком вида:
Код: xml
1.
RFH ????????????????? <mcd><Msd>jms_text</Msd></mcd>  <?xml version="1.0" encoding="UTF-8"?> ...


Данные из очереди запрашиваю так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
var queue = _queueManager.AccessQueue(ReceiveQueueName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING);
var queueMessage = new MQMessage();
queueMessage.Format = "MQHRF2"; 
var queueGetMessageOptions = new MQGetMessageOptions();
queue.Get(queueMessage, queueGetMessageOptions);
var result = queueMessage.ReadBytes(queueMessage.MessageLength);
var messageString = System.Text.Encoding.UTF8.GetString(result);


Вопрос в том, как правильно распарсить формат MQHRF2, чтобы получить тело сообщения, т.е. XML-файл?
...
Рейтинг: 0 / 0
Получение тела сообщения из сообщения формата MQHRF2
    #38845889
ZooY,

Я не часто работаю с .Net, поэтому советы больше теоретические, проверить не могу.

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

1. Для начала попробовал бы прочитать сообщение вот так (Взято из примера WebSphere MQ\tools\dotnet\samples\cs\base\SimpleGet\SimpleGet.cs):
Код: c#
1.
2.
3.
4.
queue = queueManager.AccessQueue(queueName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING);
message = new MQMessage();
queue.Get(message);
String messageText =  message.ReadString(message.MessageLength); 


2. Можно воспользоваться классами для .Net, которые аналогичны интерфейсу JMS для Java.
Ссылка: Message Service Client for .NET
...
Рейтинг: 0 / 0
Получение тела сообщения из сообщения формата MQHRF2
    #38906377
shmuks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, добрый вечер.
Сам пишу на Java. Под .NET удалось собрать и запустить примеры из MQClient, но необходимо разработать каркас приложения (MQ сервиса) который в несколько потоков слушает очередь и в случае ошибки обработки перекладывает в backout queue. На Java через Spring делается за минуты, а вот как это сделать на .NET - не хватает ни опыта ни времени. Если у вас есть возможность помочь за хорошее вознаграждение или хотя бы подсказать (а лучше примеры исходников) как в экосистеме .net решается задача создания сервисов (лучше чтобы это был windows сервис). Надеюсь на сотрудничество, очень нужно оперативно решить задачу. Стенд доступен из интернет.
...
Рейтинг: 0 / 0
Получение тела сообщения из сообщения формата MQHRF2
    #38906765
shmuks,

Замечу, что у меня нет большого опыта в .Net. Рассуждения чисто теоретические.

Задача вроде как раскладывается на составляющие:

1. Создание сервиса на .Net.
Пошаговое руководство. Создание приложения служб Windows в конструкторе компонентов
Пишем свой Windows service

2. Чтение сообщений MQ (аналог MDB для C#)
Message driven bean in C#

3. Транзакционный режим работы. В этом случае, если правильно настроить очередь MQ (прописать для нее backout очередь), то при откате транзакции сообщение будет перемещено в backout-очередь самим сервером MQ.
Distributed transactions in managed mode

4. Многопоточность.
Многопоточные приложения (C# и Visual Basic)
Пошаговое руководство. Многопоточность с помощью компонента BackgroundWorker (C# и Visual Basic)
Потоки в C# .NET первые шаги

Ну а дальше отлаживать отдельные компоненты.

Видится это так:
1. Совместить пункт 2 и 3. Транзакционная обработка сообщений MQ в одном потоке, чтобы при откате транзакции сбойное сообщение автоматически помещалось в очередь backout.
2. Потренироваться запускать несколько потоков, следить за их количеством, завершать потоки по требованию. Без использования MQ.
3. Выполнять чтение сообщений в несколько потоков. Т.е. объеденить два предыдущих пункта.
4. Создать Windows-сервис на основе C# программы.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Получение тела сообщения из сообщения формата MQHRF2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]