限制空体进入 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");
}
}
}
在您的路线构建器中,您可以使用选择和条件
应用基于内容的路线
<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>
<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");
}
}
}
在您的路线构建器中,您可以使用选择和条件
应用基于内容的路线<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>