希望这听起来并不荒谬,但我怎么能在Camel 中故意丢弃消息 ?
到目前为止,我已将它们发送到Log-Component,但同时我甚至不想记录撤销。
Camel中是否有 / dev / null 端点?
答案 0 :(得分:18)
您可以使用邮件过滤器eip过滤掉不需要的邮件。 http://camel.apache.org/message-filter
没有dev / null,component。
还有一个<停止/>你可以在路线中使用,当一条消息发出时,它将停止继续路由。
我们在dev / null上最接近的是路由到日志,在那里你将logLeve = OFF设置为选项。
答案 1 :(得分:1)
感谢我的同事(代号:cayha)......
您可以将Stub Component用作相当于/dev/null
的骆驼端点。
e.g。
activemq:route?abc=xyz
变为
stub:activemq:route?abc=xyz
虽然我不知道这个组件的内部工作方式(如果存在内存泄漏的危险等),它对我有用,我认为这样做没有任何缺点。
答案 2 :(得分:0)
<camelContext ...>
<propertyPlaceholder id="properties" location="ref:myProperties"/>
</camelContext>
// properties
cool.end=mock:result
# cool.end=result
// route
from("direct:start").to("properties:{{cool.end}}");
答案 3 :(得分:0)
我参加聚会有点晚了,但是您可以在交易所设置一个标志,并在不符合您条件的情况下使用该标志仅跳过该消息(通过调用stop)。
@Override
public void configure() throws Exception {
from()
.process(new Processor() {
@SuppressWarnings("unchecked")
@Override
public void process(Exchange exchange) throws Exception {
exchange.setProperty("skip", false);
byte[] messageBytes = exchange.getIn().getBody(byte[].class);
if (<shouldNotSkip>) {
} else { //skip
exchange.setProperty("skip", true);
}
}
}).choice()
.when(exchangeProperty("skip").isEqualTo(true))
.stop()
.otherwise()
.to();
}