2015-05-09 1 views
1

Я только начал использовать Apache Camel, и мне любопытно, как выглядит интуитивно понятное поведение асинхронного http-клиента (AHC) по умолчанию. При использовании сообщений от ActiveMQ я не могу заставить его действовать неблокирующимся способом.Camel ApacheMQ -> поведение AHC (блокирование?)

Мой маршрут выглядит следующим образом:

@Component 
public class Broadcaster extends RouteBuilder { 

    @Override 
    public void configure() throws Exception { 
    errorHandler(deadLetterChannel("activemq:failed.messages")); 

    from("activemq:outbound.messages") 
    .setExchangePattern(ExchangePattern.InOnly) 
    .recipientList(simple("ahc:${in.header[PublishDestination]}")) 
    .end(); 
    } 
} 

Я помещён несколько сообщений, половина из которых я послал к замедленной веб-сервер, а другую половину нормального. Я ожидал увидеть все обычные сообщения, потребляемые немедленно быстрым сервером, и медленные сообщения постепенно со временем. Тем не менее, это было поведение наблюдается на быстрый веб-сервер:

00:24:02.585, <hello>World</hello> 
00:24:03.622, <hello>World</hello> 
00:24:04.640, <hello>World</hello> 
00:24:05.658, <hello>World</hello> 

Как вы можете видеть, что есть ровно одна вторая между записью запроса, который соответствует второй задержки искусственный 1 на медленном сервере. На основании таймингов маршрута, это выглядит как потребитель JMS ждет AHC, чтобы завершить, прежде чем он потребляет следующее сообщение из очереди:

Processor         Elapsed (ms) 
[activemq://outbound.messages   ] [  1020] 
[setExchangePattern[InOnly]    ] [   0] 
[ahc:${in.header[PublishDestination]}} ] [  1018] 

я должен явно использовать производитель асинхронных и написать обратный вызов обработчик в этих случаях , или есть что-то еще, что мне не хватает? Спасибо!

ответ

1

Ну, в случае с RTFM, я думаю, хотя страница ActiveMQ оставляет желать много желаемого с точки зрения свойств, доступных для конфигурации конечных точек. Должно быть, должно быть примечание, чтобы сказать, что большинство (все?) Параметры конфигурации JMS также доступны для компонента ActiveMQ. В любом случае решение состоит в том, чтобы определить потребителя следующим образом:

from("activemq:outbound.messages?asyncConsumer=true") 
+0

См. Раздел _options_ на странице ActiveMQ, в основном говорит, что в одной строке текста. > См. «Параметры» в компоненте JMS, поскольку все эти параметры также применяются к этому компоненту. –

+0

Спасибо, скимминг - это плохая привычка :) – Kosta

Смежные вопросы