<camel:route id="messageRoute">
<camel:from ref="fromMessageQueue" />
<camel:processor ref="queueMessageProcessor" />
<camel:to ref="toMessageQueue" />
</camel:route>
在此代码段中,从q队列接收消息,然后在队列消息处理器中处理它,最后将其放入消息队列。在处理器中处理消息时,交换主体将设置为null。我需要阻止与null body的交换进入消息队列。
答案 0 :(得分:1)
使用Exchange模式InOut即
<blockquote>
<camel:route id="messageRoute">
<camel:from ref="fromMessageQueue" />
<camel:processor ref="queueMessageProcessor" />
**<setExchangePattern pattern="InOut"/>**
<camel:to ref="toMessageQueue" />
</camel:route>
</blockquote>
基本上你告诉Camel在同一条消息中,修改它,并发送(Out)回修改过的消息。
答案 1 :(得分:1)
@Amit:这是你可以做的,以避免NPE: 1.根据正文值设置Camel Process中的标题,例如 这里我根据In body内容设置标题IsNull。
public class QueueManagerProcessor implements Processor{
@Override
public void process(Exchange exchange) throws Exception {
if(exchange.getIn().getBody()==null){
exchange.getOut().setHeader("IsNull", "true");
}else{
exchange.getOut().setHeader("IsNull", "false");
}
}
}
在Route Builder中,您可以使用选项和条件
来应用基于内容的路由 <xpath>$IsNull = 'false'</xpath>
<camel:to ref="toMessageQueue" />
答案 2 :(得分:1)
尝试使用simple language和content based router:
<camel:route id="messageRoute">
<camel:from ref="fromMessageQueue" />
<camel:processor ref="queueMessageProcessor" />
<camel:choice>
<camel:when>
<camel:simple>${body} != null</camel:simple>
<camel:to ref="toMessageQueue" />
</camel:when>
</camel:choice>
</camel:route>