首页 > 解决方案 > 如何从运行在 IBM IIB 10+ 上的 ESQL 代码获取代理的 UUID、主机名?

问题描述

我们如何从运行在 IBM IIB 版本 10+ 上的 ESQL 代码获取代理的 UUID、主机名?

(我可以从以下位置获取 BrokerName:

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

但我似乎看不到从运行在 IBM IIB 引擎上的 ESQL 代码访问代理的 UUID、主机名。)

提前致谢。

标签: ibm-integration-bus

解决方案


因此,当涉及到 ESQL 时,您无法获得它。这让我恼火多年,我的意思是为什么要隐藏它。

如果允许使用 Java 节点,则可以通过调用 BrokerProxy 的 getUUID 方法来获取它。

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

如果没有,那么您可以

如果您有脚本部署,那么:

  • 向其中添加 mqsireportbroker 命令并抓取 UUID 值
  • 在需要 UUID 值的流中添加一个 UDP(用户定义的属性)UDP_BrokerUUID 并将其设置为类似 UNKNOWN
  • 然后在您的部署脚本中使用 mqsiapplybaroverride 将其更改为抓取的值。

然后是 IBM Integration API 练习器,它将向您展示 API 的工作原理。install_dir\server\sample\IntegrationAPI\StartIntegrationAPIExerciser

最后出于好奇,为什么需要 Node UUID?

缓存

像这样。创建一个类似于@Daniels 链接中的jar 文件。笔记

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


推荐阅读