2014-02-05 5 views
1

Какой самый простой способ получить только первое сообщение из очереди?Apache camel: фильтр/дроссель, чтобы получить только первое сообщение из очереди

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

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

Предпочитают верблюжьих DSL над фасолью + код Java :)

Редактировать

фактически читает от webspheremq темы.

Edit2

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

+0

Мне любопытно использовать прецедент? –

+0

Вариант использования - это то, что в очереди получено большое сообщение (моментальный снимок данных) (ну, собственно, это тема). Другие пользователи, запрашивающие моментальный снимок, могут инициировать другой снимок, который будет отправлен всем потребителям. Странное поведение, но я должен справиться с этим таким образом :) – vikingsteve

ответ

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") 

Может быть, вы можете использовать это в качестве отправной точки.

Cheers,

+0

Да, отлично, спасибо! Я также добавил метод 'reset()', так как мне это нужно. – vikingsteve