Как получить UUID брокера, имя хоста, из кода ESQL, работающего на IBM IIB 10+?

Как мы можем получить UUID брокера, имя хоста, из кода ESQL, работающего на IBM IIB, версия 10+?

(Я могу получить BrokerName от:

https://www.ibm.com/support/knowledgecenter/en/SSMKHH_9.0.0/com.ibm.etools.mft.doc/ak09512_.htm

но я, похоже, не вижу доступа к UUID брокера, имени хоста из кода ESQL, работающего на движке IBM IIB.)

Заранее спасибо.

2 ответа

Поэтому, когда дело доходит до ESQL, вы не можете его получить. Что раздражало меня годами, я имею в виду, зачем скрывать это.

Если вам разрешено использовать узлы Java, вы можете получить его, вызвав метод getUUID в BrokerProxy.

BrokerProxy b = BrokerProxy.getLocalInstance("MYBROKER");
String b_uuid = b.getUUID();

Если нет, то вы можете:

  • Используйте mqsireportbroker, чтобы узнать UUID
  • Используйте консоль Webadmin для добавления определения настраиваемой службы UserDefined. Давайте назовем его BrokerUUID со свойством UUID и значением, которое вы получили от mqsireportbroker. Они прячутся в разделе "Операционная политика"
  • Вызовите API-интерфейс IBM Integration RESTful /apiv1/policy/configurableservices/UserDefined/BrokerUUID, используя узел HTTPRequest или RESTRequest.
  • API RESTful в настоящее время находится по адресу https://www.ibm.com/support/knowledgecenter/en/SSMKHH_10.0.0/com.ibm.etools.mft.restapi.doc/path__policy_configurableservices_-configurableServiceType-_-configurableServicename-.html путем поиска IBM Integration RESTful API
  • Это жизнеспособно, поскольку UUID узлов не изменяется, если вы не удалите и не создадите его заново.

Если у вас есть сценарии развертывания, то:

  • Добавьте к нему команду mqsireportbroker и очистите значение UUID.
  • В потоке, которому нужно значение UUID, добавьте к нему UDP(определяемое пользователем свойство) UDP_BrokerUUID и установите для него что-то вроде UNKNOWN
  • Затем в вашем сценарии развертывания используйте mqsiapplybaroverride, чтобы изменить его на очищенное значение.

Затем есть IBM Integration API Exerciser, который покажет вам, как работает API. install_dir\ сервер \ образец \IntegrationAPI\StartIntegrationAPIExerciser

Наконец, из любопытства, зачем вам UUID узла?

Кэширование

Идет как то так. Создайте jar-файл, похожий на тот, который указан в ссылке @Daniels. Заметка

DECLARE S_CacheRow SHARED ROW; -- Done at global level
CREATE COMPUTE MODULE DoingSomething
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
    CACHE: BEGIN ATOMIC
        IF NOT EXISTS(S_CacheRow.UUID[]) THEN
            SET S_CacheRow.BrokerUUID = GetBrokerUUID();
        END IF;
        SET Environment.BrokerUUID = S_CacheRow.BrokerUUID;
    END CACHE;
END;
END MODULE;

CREATE FUNCTION GetBrokerUUID() 
RETURNS CHAR 
LANGUAGE JAVA 
EXTERNAL NAME "mycompany.common.GetBrokerInfo.getBrokerUUID" 
;

import com.ibm.broker.config.proxy.*;

public class GetBrokerInfo {

    public static String getBrokerUUID() {

    BrokerProxy bp = null;
    try {
        bp = BrokerProxy.getInstance();   
    } catch (ConfigManagerProxyException ex) {
        System.out.println("Error connecting: " + ex);
    }

    String brokerUUID = '';
    if (bp != null) {
        brokerUUID = bp.getUUID();
        bp.disconnect();
    }  
    return brokerUUID;    
}

Обратите внимание, что я написал это от руки, и это не проверено. Но это охватывает основные моменты. Вам нужно скомпилировать jar и поместить jar в папку общих классов, как правило, /var/mqsi/shared-classes

Глядя на страницу " Доступные свойства", UUID брокера и имя хоста недоступны.

Но вы можете получить UUID брокера с помощью Event Monitoring; вот образец из инфоцентра:

<wmb:messageFlowData>
   <wmb:broker wmb:UUID="d53122ae-1c01-0000-0080-b1b02528c6bf"
            wmb:name="myNode"/>
   <wmb:executionGroup wmb:UUID="d43122ae-1c01-0000-0080-b1b02528c6bf"
            wmb:name="default"/>
   <wmb:messageFlow wmb:UUID="e6d224ae-1c01-0000-0080-9100cd1a61f7"
            wmb:name="myMessageFlow" wmb:threadId="4201"
            wmb:uniqueFlowName="myNode.default.myApplication.myMessageFlow"/>
   <wmb:node wmb:nodeLabel="MQInput1" wmb:nodeType="ComIbmMqInputNode"
            wmb:terminal="in" wmb:detail="MYMESSAGEFLOW.IN"/>
</wmb:messageFlowData>
Другие вопросы по тегам