apache-camel - Camel - 保留消息的副本

标签 apache-camel jbossfuse apache-servicemix

我的 Camel 路线如下(示例)

from (activemq:xyz) --- 从 QUEUE 接收消息

to(smpp:abc) --- 提交短信至短信中心

to(cxf:hij) --- 基于 SMSC 响应成功调用网络服务

我面临的问题如下

我从队列中收到的交换属性/ header 很少,但在收到 SMPP 的响应后,我发送的交换 header /属性被清除,无法用于调用 Web 服务。我该怎么做才能保持这些值不变,直到到达路线终点。我无法控制 SMSC 实现,也无法更改 SMSC 响应。我正在使用 SPRING dsl

最佳答案

您可以考虑使用名为 Content Enricher 的企业集成模式对于 SMPP 部分,使用自定义的 AggregationStrategy 来“保留”您的原始交换(包含所有 header 和属性),并从 SMSC 中获取您需要的内容(我猜是正文?)。

from (activemq:xyz)
    .enrich(smpp:abc, new PreserveHeadersAndPropertiesAggregationStrategy())
    .to(cxf:hij)
;

public class PreserveHeadersAndPropertiesAggregationStrategy implements AggregationStrategy {
    @Override
    public Exchange aggregate(Exchange original, Exchange resource) {
         // use body from getIn() or getOut() depending on the exchange pattern...
        original.getIn().setBody(resource.getIn().getBody());
        original.getOut().setBody(resource.getOut().getBody());
        return original;
    }
}

关于apache-camel - Camel - 保留消息的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21012509/

相关文章:

java - Camel 请求/回复关联

java - ConversionPattern 用于在 JBossFuse/Apache Camel (ops4j) 中记录主机名

java - 从 Java 中的 Camel 路线获取可视化文档?

java - OSGI 1 个包中是否可以有 2 个持久单元

java - 使用 RabbitMQ 的 Camel 2.12 路由

java - Apache camel 和 spring-boot 构造函数注入(inject) - NPE

java - 在fuse Fabric中部署camel项目

spring - 方面编织应如何限制在 aop :advisor pointcuts? 引用的类中

java - 始终从远程存储库更新 bundle 或在 ServiceMix 6.0.X/Karaf 3.0.X 中禁用本地存储库

java - 在 Camel-Spring-Boot 设置中配置来自外部 JAR 的 Camel 路由