组件的Apache Camel默认数据格式

时间:2018-08-21 22:32:44

标签: json apache routes apache-camel activemq

如何在Apache Camel中为组件设置默认数据格式?

我有许多与不同ActiveMQ队列交互的路由。此刻所有的人都像

from("...")
    .process(...)
    .marshal().json() // (1)
    .to("activemq:queue:...");

from("activemq:queue:...")
    .unmarshal().json() // (2)
    .process(...)
    .to("...");
  1. 我想用组件或上下文级别的配置替换第(1)和(2)行。基本上只说一次“通过ActiveMQ的消息有效负载必须是JSON字符串”。
  2. 我不想添加任何其他路由,处理器,标头,URI参数等。
  3. 理想情况下,它将适用于ActiveMQ和JSON之外的其他组件和格式

2 个答案:

答案 0 :(得分:0)

您可以编组/解组使用对数据格式的命名引用,您可以在Camel注册表中对其进行一次定义(此处为“ myDefaultFormat”):

from("activemq:queue:...")
.unmarshal(myDefaultFormat)

这样,您不必到处重复.json() (但好的,您尚未重复命名的引用:-$)

答案 1 :(得分:0)

使用拦截器(基于克劳斯·易卜生的评论)

new RouteBuilder() {
    @Override
    public void configure() throws Exception {

        // interceptors
        interceptSendToEndpoint("activemq:queue:*")
            .marshal()
            .json();

        interceptFrom("activemq:queue:*")
            .unmarshal()
            .json();

        // routes
        from("...")
            .process(...)
            .to("activemq:queue:...");

        from("activemq:queue:...")
            .process(...)
            .to("...");
    }
}

注意:

    必须在RouteBuilder中的任何路由之前定义
  1. 拦截器。否则,将抛出IllegalArgumentException来说明情况。
  2. 拦截器不是共享的,必须在每个RouteBuilder中定义。