Инициализируйте общие переменные в потоке сообщений с помощью esql - PullRequest
0 голосов
/ 24 сентября 2019

Я использую IBM Integration Bus версии 10.0.0.15 и ищу вариант инициализации общих переменных во время запуска потока сообщений, например, с помощью команды mqsistartmsgflow.Существует ли специальная процедура или функция, которую можно реализовать с помощью ESQL, которая гарантированно будет выполнена при запуске?

В документации ESQL указано, что общие переменные инициализируются, когда первое сообщение направляется через поток, которыйозначает, что вам нужно дождаться первого сообщения.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Я думаю, что лучше всего иметь выделенный поток для инициализации общих переменных.Этот поток должен иметь входную очередь, отдельную от обычной входной очереди, просто для отправки сообщений, чтобы инициировать инициализацию.Затем вы должны создать скрипт запуска, который отправляет сообщение в этот поток инициализации после запуска основного потока обработки.И используйте только этот скрипт для запуска.

0 голосов
/ 25 сентября 2019

На самом деле вам нужно инициализировать их, как правило, это выглядит примерно так:

-- Shared row variable for caching config data. Declared at Global scope.
DECLARE S_ConfigSharedRow SHARED ROW;

CREATE COMPUTE MODULE TheFirstComputeNode
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
    CFGDATA_CACHE_LOCK: BEGIN ATOMIC
        -- If the configuration data is not available in the cache then load it from the CONFIG table
        DECLARE CfgDataRef REFERENCE TO S_ConfigSharedRow.CfgDataCache;
        IF NOT LASTMOVE(CfgDataRef) THEN
            -- Select all the relevant content from the actual database in one go.
            DECLARE DBResults ROW;
            DECLARE RetryCount INTEGER 5;
            SET DBResults.Row[] = PASSTHRU('SELECT * FROM CONFIG');

            -- Typically you would post process the content from the DB into a more amenable 
            -- structure but the following will get the data into the shared variable
            CREATE LASTCHILD OF S_ConfigSharedRow.CfgDataCache FROM DBResults;
        END IF;
    END CFGDATA_CACHE_LOCK;

    -- Config data is now available for use

    RETURN TRUE;
END;
END MODULE;
...