Я только начал использовать 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]
я должен явно использовать производитель асинхронных и написать обратный вызов обработчик в этих случаях , или есть что-то еще, что мне не хватает? Спасибо!
См. Раздел _options_ на странице ActiveMQ, в основном говорит, что в одной строке текста. > См. «Параметры» в компоненте JMS, поскольку все эти параметры также применяются к этому компоненту. –
Спасибо, скимминг - это плохая привычка :) – Kosta