Camel - 保留消息的副本

Joe*_*013 2 apache-camel jbossfuse apache-servicemix

我的骆驼路线如下(示例)

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

to(smpp:abc) --- 提交消息至 SMSC

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

我面临的问题如下

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

vik*_*eve 5

您可以考虑对 SMPP 部分使用名为Content EnricherAggregationStrategy的企业集成模式,并通过自定义“保留”您的原始交换(包含所有标头和属性),并从任何内容中获取您需要的内容(我猜是正文?)短信中心可以。

from (activemq:xyz)
    .enrich(smpp:abc, new PreserveHeadersAndPropertiesAggregationStrategy())
    .to(cxf:hij)
;
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)