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

如何在WSO2 MI中发送带Header的JSON请求并更新DB数据?

实现WSO2 MI定时数据推送与数据库更新逻辑

1. 核心流程梳理

你的需求可拆解为4个核心步骤:

  • 定时触发数据读取任务
  • 构造带JSON请求体和自定义头的POST请求
  • 用Call中介器发送请求并处理响应
  • 请求成功后更新数据库状态

2. 关键配置实现

2.1 定时任务配置(任务调度器)

先配置每5分钟触发的任务,调用数据处理序列:

<TaskManager>
    <task name="DataPushTask" class="org.wso2.carbon.mediation.ntask.NTask">
        <trigger interval="300"/> <!-- 300秒=5分钟 -->
        <property name="sequence" value="DataProcessingSequence"/>
    </task>
</TaskManager>

2.2 数据读取与处理序列

创建DataProcessingSequence,读取未发送(sent=null)的数据并循环处理每条记录:

<sequence name="DataProcessingSequence" xmlns="http://ws.apache.org/ns/synapse">
    <!-- 1. 读取数据库未发送数据 -->
    <dblookup>
        <connection>
            <pool>
                <driver>com.mysql.cj.jdbc.Driver</driver>
                <url>jdbc:mysql://localhost:3306/your_db</url>
                <user>db_user</user>
                <password>db_pass</password>
            </pool>
        </connection>
        <statement>
            <sql>SELECT id, field1, field2 FROM your_table WHERE sent IS NULL</sql>
            <result name="dataList" column="*"/>
        </statement>
    </dblookup>

    <!-- 2. 循环处理每条数据 -->
    <foreach expression="$ctx:dataList" id="dataLoop">
        <sequence>
            <!-- 构造JSON请求体 -->
            <payloadFactory media-type="json">
                <format>{"field1": "$1", "field2": "$2"}</format>
                <args>
                    <arg evaluator="xml" expression="$ctx:field1"/>
                    <arg evaluator="xml" expression="$ctx:field2"/>
                </args>
            </payloadFactory>

            <!-- 设置自定义请求头"key" -->
            <header name="key" value="text_12345"/> <!-- 替换为你的文本+数字组合 -->

            <!-- 3. 用Call中介器发送POST请求 -->
            <call>
                <endpoint>
                    <address uri="https://your-target-endpoint.com/api/push" format="json"/>
                </endpoint>
            </call>

            <!-- 4. 请求成功后更新数据库sent字段 -->
            <filter source="$axis2:HTTP_SC" regex="20[0-9]">
                <then>
                    <dbupdate>
                        <connection>
                            <pool>
                                <driver>com.mysql.cj.jdbc.Driver</driver>
                                <url>jdbc:mysql://localhost:3306/your_db</url>
                                <user>db_user</user>
                                <password>db_pass</password>
                            </pool>
                        </connection>
                        <statement>
                            <sql>UPDATE your_table SET sent = 1 WHERE id = ?</sql>
                            <parameter expression="$ctx:id" type="INTEGER"/>
                        </statement>
                    </dbupdate>
                </then>
                <else>
                    <!-- 处理请求失败逻辑 -->
                    <log level="ERROR">
                        <property name="Error" value="Failed to push data. ID: $ctx:id"/>
                        <property name="HTTP Status" expression="$axis2:HTTP_SC"/>
                    </log>
                </else>
            </filter>
        </sequence>
    </foreach>
</sequence>

2.3 Call中介器POST请求关键说明

Call中介器默认会以当前消息的payload作为请求体,只需做好两步:

  • 用payloadFactory构造符合目标端点要求的JSON结构
  • 端点配置中添加format="json",MI会自动设置Content-Type: application/json头,并以POST方式发送请求体

3. 注意事项

  • 确保数据库驱动(如MySQL的mysql-connector-java-x.x.xx.jar)已放入MI的lib目录
  • 调试时可将定时任务interval改小(如10秒),快速验证逻辑
  • 数据量大时建议添加分页读取,避免单次加载过多数据
  • 可添加try-catch中介器捕获异常,防止单条数据处理失败中断整个循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:15:28