ibm-integration-bus - 如何从运行在 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、主机名。)
提前致谢。
解决方案
因此,当涉及到 ESQL 时,您无法获得它。这让我恼火多年,我的意思是为什么要隐藏它。
如果允许使用 Java 节点,则可以通过调用 BrokerProxy 的 getUUID 方法来获取它。
BrokerProxy b = BrokerProxy.getLocalInstance("MYBROKER");
String b_uuid = b.getUUID();
如果没有,那么您可以:
- 使用 mqsireportbroker 找出 UUID
- 使用 Webadmin 控制台添加 UserDefined Configurable Service 定义。我们将其称为 BrokerUUID,它具有 UUID 属性和您从 mqsireportbroker 获得的值。他们隐藏在运营政策部分
- 使用 HTTPRequest 或 RESTRequest 节点调用 IBM Integration RESTful API /apiv1/policy/configurableservices/UserDefined/BrokerUUID。
- RESTful API 当前位于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 练习器,它将向您展示 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
推荐阅读
- flutter - ShaderMask LinearGradient 停止奇怪的行为
- awk - 如何将 awk 脚本附加到文件中?
- graph - 在 Ocaml 中检测无向图中的循环
- react-native - React native:使用计时器更改状态时组件不会重新呈现
- firebase - Firebase 用户身份验证不同实例上的多个用户
- javascript - JavaScript 数学计算 - 与 Excel 公式相比,结果不同
- reactjs - React Route 为每条路线渲染不同的横幅图像
- javascript - 如何等待异步?为什么等待不起作用?
- mapbox-gl-js - 在哪里可以找到 mapbox-gl 的绘制属性列表?
- php - 如何在 laravel 黄昏测试中共享用户数据