Apache camel:filter / throttle只从队列中获取第一条消息

时间:2014-02-05 11:05:31

标签: java apache-camel dsl throttling

从队列中获取第一条消息的最简单方法是什么?

鉴于在标题中我没有看到任何东西可以过滤(没有序列号等,至少就我所见),还有什么比这更好的吗?

from("webspheremq:topic:SNAPSHOTS")
    .throttle(1).timePeriodMillis(1234567890L * 1000)
    .to("direct:anotherqueue")

喜欢camel DSL over beans + java code :)。

修改

实际上是从webspheremq主题中读取的。

EDIT2

不要使用Long.MAX_VALUE作为时间段!请改用1234567890L * 1000

1 个答案:

答案 0 :(得分:1)

您可以尝试使用保持第一状态的单例进行过滤:

public static class FirstOrNot {
    private static FirstOrNot _instance;

    public synchronized boolean isfirst() {
        if ( _instance == null ) {
            _instance = new FirstOrNot();
            return true;
        }
        return false;
    }
}

FirstOrNot first = new FirstOrNot();

from("webspheremq:topic:SNAPSHOTS")
    .filter().method( first , "isFirst" )
    .to("direct:anotherqueue")

也许您可以将此作为起点。

干杯,