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]}")
相关推荐
sxhcwgcy1 天前
SpringBoot 使用 spring.profiles.active 来区分不同环境配置
spring boot·后端·spring
稻草猫.1 天前
Spring事务操作全解析
java·数据库·后端·spring
希望永不加班1 天前
SpringBoot 整合 MongoDB
java·spring boot·后端·mongodb·spring
Lzh编程小栈1 天前
数据结构与算法之队列深度解析:循环队列+C 语言硬核实现 + 面试考点全梳理
c语言·开发语言·汇编·数据结构·后端·算法·面试
妙蛙种子3111 天前
【Java设计模式 | 创建者模式】工厂方法模式
java·后端·设计模式·工厂方法模式
freejackman1 天前
Java从0到1---基础篇
java·开发语言·后端·idea
无心水1 天前
20、Spring陷阱:Feign AOP切面为何失效?配置优先级如何“劫持”你的设置?
java·开发语言·后端·python·spring·java.time·java时间处理
0xDevNull1 天前
Java 21 新特性概览与实战教程
java·开发语言·后端
Gse0a362g1 天前
Go - Zerolog使用入门
开发语言·后端·golang
Renhao-Wan1 天前
Docker 核心原理详解:镜像、容器、Namespace、Cgroups 与 UnionFS
java·后端·docker·容器