Apache Camel使用教程一

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

最近研究EIP,以前了解过Apache Camel,但是一直是不入门状态,闹不清楚其中的概念和用法,遂决定写一系列博客,记录下"""骆驼"的概念和使用API,一来熟悉使用,二来做个API留存,以后一旦有需要,直接查询博客,CTL+CV哈哈。

注:文中大部分代码样例来源:https://blog.csdn.net/column/details/19378.html,不过改博主已停止更新好多年,网页也打不开,但是吃水不忘挖井人,还是要申明下的,嘿嘿


一、骆驼-HelloWord?

按照惯例,首先还是上一段helloword代码

c 复制代码
public class APPHelloWorld01 extends RouteBuilder {
 public static void main(String[] args) throws Exception {
        ModelCamelContext camelContext = new DefaultCamelContext();
        camelContext.start();
        camelContext.addRoutes(new APPHelloWorld01());
        synchronized (APPHelloWorld01.class) {
            APPHelloWorld01.class.wait();
        }
    }
    @Override
    public void configure() throws Exception {
        // 在本代码段之下随后的说明中,会详细说明这个构造的含义
        from("jetty:http://127.0.0.1:8282/doHelloWorld").process(new HttpProcessor())
                .to("log:helloworld?showExchangeId=true");
    }
    public class HttpProcessor implements Processor {

        public void process(Exchange exchange) throws Exception {
            // 因为很明确消息格式是http的,所以才使用这个类
            // 否则还是建议使用org.apache.camel.Message这个抽象接口
            HttpMessage message = (HttpMessage) exchange.getIn();
            InputStream bodyStream = (InputStream) message.getBody();
            String inputContext = IOUtils.toString(bodyStream,"UTF-8");
            bodyStream.close();

            // 存入到exchange的out区域
            if (exchange.getPattern() == ExchangePattern.InOut) {
                Message outMessage = exchange.getOut();
                outMessage.setBody(inputContext + " || out");
            }
        }
    }
    }

测试

二、骆驼-组件

1.Choice Camel

代码如下(示例):

c 复制代码
//Processor 样例
public class Process implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        InputStream body = exchange.getIn().getBody(InputStream.class);
        String inputContext = IOUtils.toString(body, "UTF-8");
        if (exchange.getPattern() == ExchangePattern.InOut) {
            Message outMessage = exchange.getOut();
            outMessage.setBody(inputContext + " || 被Process04处理");
        }
    }
}
//提取json数据样例
JsonPathExpression jsonPathExpression = new JsonPathExpression("$.data.orgId");
jsonPathExpression.setResultType(String.class);
//一、从header读取值判断
from("jetty:http://0.0.0.0:8282/choiceCamel").process(new Process01())
                // 将orgId属性的值存储 exchange in Message的header中,以便后续进行判断
                .setHeader("orgId", jsonPathExpression)
                .choice()
                .when(header("orgId").isEqualTo("yuanbao")).process(new Process02())
                .when(header("orgId").isEqualTo("yinwenjie")).process(new Process03())
                .otherwise().process(new Process04())
                .endChoice();
//二、从body读取字符串判断
from("jetty:http://0.0.0.0:8080/choiceCamel").process(new Process())
                .choice()
                .when(body().contains("xiao")).process(new Process())
                .when(body().contains("da")).process(new Process())
                .otherwise().process(new Process())
                .endChoice();
//三、读取Json文件,对文件内容进行转换,接着判断对应字段值。body是关键字
        from("file:./jsonfile?noop=true")
                .unmarshal().json(JsonLibrary.Jackson, User.class)
                .choice()
                .when().simple("${body.name} == 'xiao'").process(new Process())
                .when().simple("${body.name} == 'da'").process(new Process())
                .otherwise().process(new Process07())
                .endChoice();   

//四、读取文件根据文件名称判断 (不过,这个也可以用file组件中的filter属性来做(效率比这个好))
from("file:./simple?noop=true")
                .unmarshal().json(JsonLibrary.Jackson, Order.class)
                .choice()
                .when(header("CamelFileName").isEqualTo("simple.json")).process(new Process05())
                .when(header("CamelFileName").isEqualTo("simple2.json")).process(new Process06())
                .otherwise().process(new Process07())
                .endChoice();

2.Dynamic Camel

代码如下(示例):

c 复制代码
data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

相关推荐
todoitbo14 小时前
把 XAMPP 搬到鸿蒙 PC:在鸿蒙 PC 上跑 Apache httpd 2.4.69实战项目
华为·apache·harmonyos·鸿蒙·开源鸿蒙·鸿蒙pc
AI行业应用研究14 小时前
会务系统的查询路径设计:从菜单导航到意图检索,多大规模的活动该配 AI 助理?
人工智能·apache
超龄超能程序猿18 小时前
Apache Guacamole 入门指南
apache
豆角焖肉2 天前
Apache POI 实现 Excel 上传解析、导出
apache·poi·multipartfile·excel 导入导出·批量导入
nvd112 天前
深入剖析:GCP Pub/Sub 与 Apache Kafka 对消息处理延迟与消费者卡死的处理机制异同
分布式·kafka·apache
白帽攻防录3 天前
SRC 挖洞:Apache APISIX 非规范路径授权绕过深度复盘,CVE-2026-94269 怎么绕过网关访问后端
网络安全·apache·src漏洞挖掘
Knight_AL3 天前
从 EasyExcel 到 Apache Fesod:Java Excel 处理生态的一次重构
java·apache·excel
心易行者4 天前
Agent应用+API端点商业化进阶实战:从单体智能体到可付费调用的API全流程
运维·服务器·人工智能·python·apache
文慧的科技江湖10 天前
2026年10月4日充电桩行业晚报:当“只充80%“成为通行规则,行业开始管单车占桩时长 | 慧知开源充电桩平台
开源·apache·新能源·虚拟电厂·充电桩·ocpp·v2g
nvd1112 天前
# 从 192 秒到 13 秒:Apache Flink 批处理极速调优实战记录
大数据·flink·apache