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



              

Модификация объектов - часть 2


В случае, когда программа rewriter (см. лекцию 8), запускается как триггер, при поступлении сообщения в очередь INPUT.Q, использовать ini-файл неудобно и гораздо проще задать необходимые параметры в свойствах очереди. Для этого в свойствах очереди INPUT.Q в закладке Triggering указывается:

Trigger Control = On Initiation Queue Name = INPUT_INIT.Q Process Name = rewriter

а для процесса rewriter определяется

PROCESS_USER_DATA = OUTPUT.Q /* queue output */ PROCESS_APPL_ID = "C:\rewriter\rewriter.exe" PROCESS_ENV_DATA = rewriter.log /* имя лог-файла не более 24 символов */

Теперь в программе легко можно извлечь все необходимые параметры с помощью MQINQ. После завершения работы программы очередь инициализации следует очистить. Это делает следующий фрагмент кода:

MQLONG Select[1]; /* attribute selectors */ MQLONG SelectValue[1]; /* value attribute selectors */ MQLONG char_count; char queueinitname[48] = ""; int queuenamelen;

Select[0] = MQCA_INITIATION_Q_NAME; /* attribute selectors */ queuenamelen = 0; char_count = 48; MQINQ(Hcon, Hobj, 1, Select, 0, NULL, char_count, queueinitname, &CompCode, &Reason); queuenamelen = strlen(queueinitname) - 1; queueinitname[queuenamelen] = ' '; strncpy(odI.ObjectName, queueinitname, 24); O_options = MQOO_INPUT_SHARED + MQOO_FAIL_IF_QUIESCING; MQOPEN(Hcon, &odI, O_options, &Hinq, &CompCode, &Reason); if (Reason != MQRC_NONE) { printf("MQOPEN (input) ended with reason code %ld\n", Reason); } if (CompCode == MQCC_FAILED) { exit(Reason); } memcpy(md.MsgId, MQMI_NONE, sizeof(md.MsgId)); memcpy(md.CorrelId, MQMI_NONE, sizeof(md.CorrelId)); while (CompCode == MQCC_OK) { gmo.Options = MQGMO_ACCEPT_TRUNCATED_MSG + MQGMO_WAIT; gmo.WaitInterval = 1; memcpy(md.MsgId, MQMI_NONE, sizeof(md.MsgId)); memcpy(md.CorrelId, MQMI_NONE, sizeof(md.CorrelId)); buflen = sizeof(buffer) - 1; MQGET(Hcon, Hinq, &md, &gmo, buflen, buffer, &messlen, &CompCode, &Reason); // printf("Inituation queue clear with // reason code %ld and CompCode %ld\n", // Reason, CompCode); } CompCode = MQCC_OK ;




Содержание  Назад  Вперед