Интеграция приложений на основе WebSphere MQ


Программа rewriter (модель "один к одному") - часть 5


Программа rewriter.exe работает достаточно быстро и сравнительные скорости работы данного алгоритма при длине сообщения 1Кб на компьютере INTEL Pentium 1.8Ггц приведены в таблице ниже.

Таблица 9.1.

Язык программы\тип очередиNot PersistentPersistent
С++1000 сооб/сек400 сооб/сек
Visual Basic 6.0200 сооб/сек140 сооб/сек

Увеличение длины сообщения не ведет к пропорциональному уменьшению скорости. Эти исследования читатель может проделать самостоятельно. Реальные приложения, работающие с базами данных, имеют скорость обработки сообщений в 3-4 раза меньше.

Возвращаясь к вопросу о стилях программирования, следует отметить, что обработка кода ошибки является обязательным атрибутом качественного программирования и об этом не следует забывать. В нашей программе дается предупредительное сообщение и делается выход из программы. Если этого не сделать, то простая описка в rewriter.ini файле приведет к зависанию программы и мучительному поиску причин такого зависания, не говоря о других более сложных ситуациях, например, когда очередь открыта эксклюзивно другим приложением.

Для версии программы gmo.WaitInterval = MQWI_UNLIMITED полезно сделать вывод на экран передаваемых сообщений, чтобы наблюдать динамику работы созданного интерфейса. Таких улучшений может быть достаточно много и мы рассмотрим две достаточно полезные модификации.

  1. Программа rewriter может вызываться как MQSeries-триггер. Для этого параметры можно задать следующим образом. Входная очередь – это очередь, на которой определен триггеринг. Выходная очередь – это User Data в триггерном процессе и имя лог файла – это Environment Date в триггерном процессе. В этом случае код в начале программы будет такой.

    /* Код для вызова rewriter.exe как MQSeries-триггер */ int main(int argc, char **argv) { if (argc > 1) {trig = (MQTMC2*)argv[1]; strncpy(odG.ObjectName, trig->QName, MQ_Q_NAME_LENGTH); strncpy(queue1, trig->QName, MQ_Q_NAME_LENGTH); strncpy(QManager, trig->QMgrName, MQ_Q_MGR_NAME_LENGTH); strncpy(odP.ObjectName, trig->UserData, MQ_PROCESS_USER_DATA_LENGTH); strncpy(queue2, trig->UserData, MQ_PROCESS_USER_DATA_LENGTH); strncpy(logfilename2, trig->EnvData, 48); }




    Начало  Назад  Вперед



    Книжный магазин