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]}")
相关推荐
Gopher_HBo10 小时前
Go CPU 剖析的"地基":信号、CAS、写屏障、无锁环形缓冲
后端
panbook10 小时前
从0到1实现一个分布式时序数据库(二):写入成功之后,如何用 WAL 找回数据
后端
Swot10 小时前
上传一张 4MB 图片,我先后撞上了三层请求体限制
后端
IT_陈寒10 小时前
Vite的HMR把我整不会了:一个生产环境的热更新坑
前端·人工智能·后端
OLRainM10 小时前
实习复盘:大模型网关渠道质量评分实战(二)—— 报错了到底算谁的锅?流式归因与 Token 补账踩过的 8 个真坑
后端
梦想恒远11 小时前
Spring Boot + LangChain4j 统计 token 成本:ChatModelListener 实测与单价口径
spring boot·后端
努力的小郑11 小时前
数据查到了,回答去哪儿了?一次百炼 + LangChain 排查实录
后端·langchain·agent
isfox12 小时前
Python 虚拟环境:别再把所有项目塞进一个"大仓库"了
后端
易师傅12 小时前
技术面试已死?AI 时代,真正拉开程序员差距的是什么?
前端·后端·程序员
苍何12 小时前
办公 Agent 权威评测榜单出炉了,豆包第一
后端