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]}")
相关推荐
fulton3 分钟前
为什么AI写的小说节奏总是崩
后端
fulton4 分钟前
为什么AI写到30章角色就崩人设
后端
fulton5 分钟前
AI写小说每章都要过安检?8级质量门禁详解
后端
fulton7 分钟前
AI写长篇小说为什么30章必崩
后端
fulton8 分钟前
AI写到第30章就"失忆"?15条状态轨详解
后端
fulton8 分钟前
这是核心创意卡最反直觉的地方:5项不可修改的设定,反而让大纲设计变得**更容易**而非更难。 | 维度 | 无约束 | 有5项锚点 | |---|---|
后端
Augustzero14 分钟前
为什么线程不能说睡就睡?看懂等待与唤醒机制
c++·后端
云边有个稻草人19 分钟前
SQL Server数据迁移不只是“搬过去”:金仓如何让复杂查询越迁越快
后端
桦说编程22 分钟前
盘点并发集合里那些容易误判的行为
java·后端·性能优化
云边有个稻草人25 分钟前
时序数据库如何告别手工分片?看金仓“超表”怎样简化海量数据管理
后端