package com.mdfp.intel.audit.camel.routes;
import com.alibaba.fastjson.JSONObject;
import com.mdfp.intel.audit.camel.aggregator.SimpleFlowMergeAggregator;
import com.mdfp.intel.audit.camel.bean.CamelUtil;
import com.mdfp.intel.audit.camel.bean.TestCamelBean;
import com.mdfp.intel.audit.camel.process.*;
import com.mdfp.intel.audit.camel.split.ListSplit;
import com.mdfp.intel.audit.camel.split.SplitHelpModel;
import org.apache.camel.*;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
public class YwrDemoRoute extends RouteBuilder {
@Override
public void configure() {
onException(RuntimeException.class)
.handled(true)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
String body = exchange.getIn().getBody(String.class);
Exception e = exchange.getProperty(Exchange.EXCEPTION_CAUGHT,
Exception.class);
StringBuilder sb = new StringBuilder();
sb.append("ERROR: ");
sb.append(e.getMessage());
sb.append("\nBODY: ");
sb.append(body);
System.out.println("单独对错误信息再处理:"+ sb.toString());
}
})
.end();
from("direct:start")
.choice()
.when(simple("${in.body.token} == null || ${in.body.token} == '' "))
.to("direct:login")
.otherwise()
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
String token = exchange.getIn().getBody(String.class);
exchange.getIn().setHeader("authorization", token);
exchange.getIn().setHeader("RequestMethod", "POST");
exchange.getIn().setHeader("Content-Type", "application/json");
}
})
.end()
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
String param = " {\"pageIndex\":1,\"pageRows\":10,\"params\":{\"pageIndex\":1,\"pageRows\":10,\"params\":{\"requestData\":{}}}}";
exchange.getIn().setBody(param);
}
})
.to("http://api.devcenter.sieiot.com/dyapi/api-data-source/find-pagination")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Message in = exchange.getIn();
String body = in.getBody(String.class);
JSONObject jsonObject = JSONObject.parseObject(body).getJSONObject("data");
String data = jsonObject.getString("data");
exchange.getIn().setBody(JSONObject.parseArray(data));
}
})
.split().method(ListSplit.class).aggregationStrategy(new SimpleFlowMergeAggregator())
.choice()
.when(simple("${in.body.flag} == 'mysql'"))
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
SplitHelpModel body = exchange.getIn().getBody(SplitHelpModel.class);
exchange.getIn().setBody(body.getBody());
}
})
.to("direct:mysql")
.otherwise()
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
SplitHelpModel body = exchange.getIn().getBody(SplitHelpModel.class);
exchange.getIn().setBody(body.getBody());
}
})
.to("direct:otherSource")
.end()
.end()
.bean(CamelUtil.class, "out")
.multicast().parallelProcessing()
.to("direct:mq", "direct:log");
from("direct:login")
.process(new LoginPramProcess())
.to("http://api.devcenter.sieiot.com/api/base/base-user/login")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Message in = exchange.getIn();
String body = in.getBody(String.class);
JSONObject jsonObject = JSONObject.parseObject(body);
if (jsonObject.get("code") == null || jsonObject.getInteger("code") != 800){
exchange.setException(new RuntimeException(
jsonObject.get("msg") == null ? "获取接口凭证失败" : jsonObject.getString("msg")));
}else {
exchange.getIn().setHeader("authorization", jsonObject.get("token"));
}
}
})
.end();
from("direct:mysql")
.log(" MYSQL处理分支 数据列表: ${body}")
.end();
from("direct:otherSource")
.log("otherSource处理分支 数据列表: ${body}")
.end();
from("direct:mq")
.log("模拟并发请求给mq: ${body}")
.end();
from("direct:log")
.log("模拟并发请求给log: ${body}")
.end();
}
public static void main(String[] args) throws Exception {
CamelContext context = new DefaultCamelContext();
context.start();
context.addRoutes(new YwrDemoRoute());
ProducerTemplate producerTemplate = context.createProducerTemplate();
producerTemplate.sendBody("direct:start", null);
}
}