Apache Camel 框架入门记录(二)

前一篇:Apache Camel 框架入门记录(一)

一、Camel消息处理器Processor

如果需要对传输的数据进行处理,则可以通过Processor接口实现消息处理器:

java 复制代码
public class MyProcessor implements Processor {
    // Processes the message exchange 
    // @param exchange the message exchange 
    // @throws Exception if an internal processing error has occurred.
    public void process(Exchange exchange) throws Exception { 
        // do something... 
    }
}

然后,可以在路由配置中调用此处理器:

java 复制代码
from("activemq:myQueue").process(new MyProcessor());

也可在注册表中注册此处理器,再通过Bean ID调用处理器。

如果处理逻辑较为简单,可以使用匿名类:

java 复制代码
    from("activemq:myQueue").process(new Processor() {
        public void process(Exchange exchange) throws Exception {
            String payload = exchange.getMessage().getBody(String.class);
            // do something with the payload and/or exchange here
           exchange.getMessage().setBody("Changed body");
       }
    }).to("activemq:myOtherQueue");

二、消息交换接口Exchange

在 Camel 中,请求消息及其对应的回复或异常消息通过Exchange接口来表示。

  • Exchange 内部包含 Message,可通过Exchange.getIn()获取。
    • Message是消息接口,包含信息如下:
      • body:消息体(即有效载荷 payload)
      • headers:携带附加信息的消息头
      • messageId:消息的唯一标识。默认情况下,消息使用与 Exchange.getExchangeId() 相同的 ID。
      • timestamp:消息的时间戳,即消息产生的时间。一些系统(如 JMS、Kafka、AWS)在事件或消息中自带时间戳。当 Camel 接收到这些消息时,如果存在时间戳,则该方法会返回该时间戳。
  • Exchange的生命周期贯穿整个路由,因此可以在Exchange保存重要数据数据(properties):
java 复制代码
Exchange.getProperty(String)
Exchange.setProperty(String, Object)

Camel还提供了简单表达式语言(SEL),用于处理简单的信息处理,这种语言支持使用${body}等占位符来表示动态表达式和函数,等价于Exchange.getIn():

java 复制代码
from("kafka:test,test1,test2?brokers=localhost:9092")
    .process(new MyProcessor())
    .log("Message received from Kafka : ${body}")
    .log("    on the topic ${headers[kafka.TOPIC]}")
相关推荐
学长毕业设计15 小时前
基于SpringBoot的健康食谱管理系统的设计与实现(源码+文档+讲解视频)
java·spring boot·后端
逃逸线LOF16 小时前
Spring的AOP简介
java·后端·spring
yume_sibai17 小时前
02-Rust 所有权与借用深入解析(底层原理 + 借用检查器 + 生命周期 + 内部可变性)
开发语言·后端·rust
卷无止境17 小时前
从脚本到程序:Windows平台上的Python打包全景图
后端·python
骇客野人17 小时前
Springboot 的 配置文件 application.yml 和 bootrap.yml 的由来和作用
java·spring boot·后端
岁月宁静17 小时前
三、《从零手撸 Agent》 · system prompt 与核心参数:调好你的旋钮
后端·python·agent
bcbnb17 小时前
Flutter-Notebook代码混淆:Android与iOS平台安全配置
后端·ios
泡海椒17 小时前
SpringBoot 集成 JQuick-Curl:Spring 环境完整接入教程,第三方接口调用别再到处手写模板类
后端
落木萧萧82517 小时前
MyBatis 关联查询的四种写法,为什么最后都变回了手写 XML
java·数据库·后端
cui_hao_nan17 小时前
Spring AOP 自调用、代理与 private 方法引发的诡异 NPE
java·后端·spring·ai开发