Верблюд Apache: фильтр / дроссель, чтобы взять только первое сообщение из очереди

Какой самый простой способ взять только первое сообщение из очереди?

Учитывая, что я не вижу в заголовке ничего для фильтрации (никаких порядковых номеров или тому подобного, по крайней мере, насколько я вижу), есть ли что-нибудь лучше, чем это?

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

Предпочитайте Camel DSL вместо bean-компонентов + Java-код :)

Изменить

на самом деле чтение из темы webspheremq.

Изменить2

не используйте Long.MAX_VALUE в качестве периода времени! Попробуйте вместо этого 1234567890L * 1000


person vikingsteve    schedule 05.02.2014    source источник
comment
Меня интересует вариант использования?   -  person Anders R. Bystrup    schedule 05.02.2014
comment
Вариант использования — большое сообщение (снимок данных) поступает в очередь (ну, собственно, это топик). Другие пользователи, которые запрашивают моментальный снимок, особым образом инициируют отправку другого снимка всем потребителям. Странное поведение, но я должен справиться с этим таким образом :)   -  person vikingsteve    schedule 05.02.2014


Ответы (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")

Возможно, вы можете использовать это как отправную точку.

Ваше здоровье,

person Anders R. Bystrup    schedule 05.02.2014
comment
Да, отлично, спасибо! Я также добавил метод reset(), так как он мне был нужен. - person vikingsteve; 05.02.2014