在Apache Camel中关闭消息

时间:2013-05-16 08:48:41

标签: apache-camel

希望这听起来并不荒谬,但我怎么能在Camel 中故意丢弃消息

到目前为止,我已将它们发送到Log-Component,但同时我甚至不想记录撤销。

Camel中是否有 / dev / null 端点?

4 个答案:

答案 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)

可以使用property component

将uri / mock-uri放入配置中
<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();
}