Как получить 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>