Apache camel集成引擎发布HTTP接口,利用分支节点,根据不同的入参进行跨数据库查询数据的路由设置

1.整个路由的设置如图。黑色标号的2和3两个JDBC节点访问的数据库不同,标号2的JDBC节点访问的是oracle数据库,标号3的JDBC节点访问的是sqlserver数据库。注意:截图界面因为是公司对Apache camel做了一些封装,可能跟Apache camel原生界面不一样,但是节点的功能差不多的。图标什么的也差不多。

2.入参json格式如下,分支节点的目的是当fvisitordno入参有值时候走路由上面一条线,查询对应入参范围的值,如果fvisitordno入参无值时,走路由的下面一条线。

{
	"data": {
		"end_date": "2024-03-27 23:59:59",
		"fsource": "MNIS",
		"start_date": "2024-03-25 00:00:00",
		"fvisitordno": ""
	}
}

3.获取ID节点采用groovy代码,获取上json入参中的三个参数,设置为消息头。

package com.kingdeehit.cloud.integration.service;//这个是金蝶云的一个java包
import com.kingdeehit.cloud.core.exception.CloudBaseException;//这个是金蝶云的一个java包
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.mortbay.log.Log;
import java.util.Map;

public class Groovy3 extends IGroovyPlugin {
    @Override
    public void process(Exchange exchange) {
        try {
          Message message = exchange.getIn();
            Map body = message.getBody(Map.class);
            String id = (String) body.get("data").("fvisitordno");//获取json入参中data节点下的fvisitordno值
            message.setHeader("fvisitordno",id);//setHeader把值设置为消息头
            String id1 = (String) body.get("data").("start_date");//获取json入参中data节点下的start_date值
            message.setHeader("start_date",id1);//setHeader把值设置为消息头
            String id2 = (String) body.get("data").("end_date");//获取json入参中data节点下的end_date值
            message.setHeader("end_date",id2);//setHeader把值设置为消息头
        } catch (Exception e) {
            throw new CloudBaseException(e);
        } 
    }
} 

4.分支节点的设置如图

5.标号2JDBC节点配置如下图

 

6.灰色标号3的groovy脚本如下

package com.kingdeehit.cloud.integration.service;
import com.kingdeehit.cloud.core.exception.CloudBaseException;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.mortbay.log.Log;
import java.util.*;

public class Groovy3 extends IGroovyPlugin {
    @Override
    public void process(Exchange exchange) {
        try {
            Message message = exchange.getIn();
            ArrayList body = (ArrayList) message.getBody();//获取上一步消息中的body对象
			StringBuilder strappnote_id =new StringBuilder()
			for(int i = 0; i< body.size();i++){//遍历body中的对象
			HashMap mapappnote_id = (HashMap) body.get(i);
			String tempappnote_id =mapappnote_id.get("appnote_id").toString()//遍历body对象中的appnote_id值
			strappnote_id=strappnote_id.append(tempappnote_id).append("','")//将appnote_id值依次添加到strappnote_id对象中
			}
			strappnote_id.insert(0, "('")
			Integer length = new Integer(strappnote_id.length()-2);
			strappnote_id.setLength(length)
			strappnote_id=strappnote_id.append(")")
            HashMap mapbody = new HashMap()
            mapbody.put("appnote_id",strappnote_id)
            String start_date = (String) message.getHeader("start_date");//获取Header中的start_date值
            mapbody.put("start_date",start_date) //将start_date值添加到mapbody对象中
            String end_date = (String) message.getHeader("end_date");
            mapbody.put("end_date",end_date) 
      exchange.getIn().setBody(mapbody)
        } catch (Exception e) {
            throw new CloudBaseException(e);
        } 
    }
} 

7.黑色标号3JDBC节点配置如下图

8.灰色标号4的groovy节点脚本如下,将黑色标号3JDBC节点集出来的数据处理成map输出。

package com.kingdeehit.cloud.integration.service;
import com.kingdeehit.cloud.core.exception.CloudBaseException;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import java.util.*;

public class Groovy3 extends IGroovyPlugin {
    @Override
    public void process(Exchange exchange) {
        try {
            Message message = exchange.getIn();
            List body = message.getBody(List.class);
            HashMap newBody = new HashMap();
            newBody.put("data", body);//把body添加到map对象中的data节点里
            message.setBody(newBody);
        } catch (Exception e) {
            throw new CloudBaseException(e);
        }
    }
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值