You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IBM App Connect Enterprise需求:请求发送时存储节点等信息至数据库的ESQL代码

IBM App Connect Enterprise 请求/响应数据入库的ESQL实现

目标表结构(示例)

先创建用于存储数据的数据库表(以DB2为例):

CREATE TABLE REQUEST_RESPONSE_LOG (
    LOG_ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    INTEGRATION_NODE VARCHAR(100) NOT NULL,
    SERVER_NAME VARCHAR(100) NOT NULL,
    APPLICATION_NAME VARCHAR(100) NOT NULL,
    REQUEST_DATA CLOB,
    RESPONSE_DATA CLOB,
    TIMESTAMP TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

ESQL实现代码

将以下代码放置在Compute节点中,确保节点已配置对应数据库数据源(通过节点Database属性指定数据源名称):

CREATE COMPUTE MODULE RequestResponseLogger
    CREATE FUNCTION Main() RETURNS BOOLEAN
    BEGIN
        -- 1. 获取ACE运行时元数据
        DECLARE integrationNodeName CHAR(100);
        DECLARE serverName CHAR(100);
        DECLARE applicationName CHAR(100);

        SET integrationNodeName = Environment.Variables.MQSI_INTEGRATION_NODE_NAME;
        SET serverName = Environment.Variables.MQSI_SERVER_NAME;
        SET applicationName = Environment.Variables.MQSI_APPLICATION_NAME;

        -- 2. 提取请求、响应原始数据
        DECLARE requestData CLOB;
        DECLARE responseData CLOB;

        -- 将请求消息树转换为CLOB存储
        SET requestData = CAST(ASBITSTREAM(InputRoot.*, InputRoot.Properties.Encoding, InputRoot.Properties.CodedCharSetId) AS CLOB);
        -- 将响应消息树转换为CLOB存储
        SET responseData = CAST(ASBITSTREAM(OutputRoot.*, OutputRoot.Properties.Encoding, OutputRoot.Properties.CodedCharSetId) AS CLOB);

        -- 3. 写入数据库
        DECLARE dbRef REFERENCE TO Database.REQUEST_RESPONSE_LOG;
        INSERT INTO dbRef (
            INTEGRATION_NODE,
            SERVER_NAME,
            APPLICATION_NAME,
            REQUEST_DATA,
            RESPONSE_DATA
        ) VALUES (
            integrationNodeName,
            serverName,
            applicationName,
            requestData,
            responseData
        );

        RETURN TRUE;
    END;
END MODULE;

关键说明

  • 元数据获取:通过ACE内置的Environment.Variables变量直接读取运行时的节点、服务器、应用名称,无需额外配置。
  • 消息转换:使用ASBITSTREAM函数将完整消息树转为字节流,再转为CLOB类型,确保保留请求/响应的原始格式与内容。
  • 异常处理扩展:若需处理数据库插入失败场景,可添加TRY/CATCH块:
BEGIN
    -- 插入逻辑
EXCEPTION
    WHEN OTHERS THEN
        SET Environment.Error = SQLCODE || ' : ' || SQLSTATE || ' : ' || SQLERRORTEXT;
        -- 可根据需求执行日志记录或回退操作
        RETURN FALSE;
END;

注意事项

  • 确保数据库账号拥有目标表的INSERT权限。
  • 若消息内容过大,需确认数据库CLOB字段的容量限制是否满足需求。
  • 若使用JDBC数据源,需提前在ACE中加载对应驱动,并在数据源配置中正确填写驱动类与连接URL。

内容的提问来源于stack exchange,提问作者manideep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:50:25