限制空体进入 xml 中的骆驼端点

Restrict the null body from entering into a camel endpoint in xml

<camel:route id="messageRoute">    
<camel:from ref="fromMessageQueue" />
<camel:processor ref="queueMessageProcessor" />
<camel:to ref="toMessageQueue" />
</camel:route>

在这个代码片段中,从 q queue 接收消息然后在队列消息处理器中处理它,最后将它放入消息队列。在处理器中处理消息时,交换主体被设置为空。我需要防止空主体的交换进入消息队列。

使用交换模式 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 在同一条消息中修改它,然后将修改后的消息发送(出)回。

@Amit:这是避免 NPE 的方法: 1. 根据 body 值在您的 Camel Process 中设置 header,例如 在这里,我根据 In body 内容设置 header 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");
        }
    }

}
  1. 在您的路线构建器中,您可以使用选择和条件

    应用基于内容的路线
           <xpath>$IsNull = 'false'</xpath>
             <camel:to ref="toMessageQueue" />
    

尝试使用simple language and 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>