2015-04-27 4 views
0

Я использую функцию split-aggregate в Camel, чтобы разделить некоторые работы среди некоторых JMS-клиентов. Маршрут определяется верблюд (с использованием заводной) следующим образом:Тайм-ауты на верблюде

from("vm:getQuotes") 
     .split(new MethodCallExpression("requestSplitter", "splitAmongstBots"), new ArrayListAggregationStrategy()) 
     .to("jms:queue:quoteRequests?requestTimeout=${responseTimeout}s") 
     .unmarshal().json(JsonLibrary.Jackson) 
     .end() 

Клиенты JMS может занять от около 15 до 90 секунд, чтобы обработать задачи. Я вижу это исключение 30secs после первоначального разделения:

Caused by: org.apache.camel.ExchangeTimedOutException: The OUT message was not received within: 30000 millis. Exchange[Message: {village=CHEC}] 
    at org.apache.camel.component.seda.SedaProducer.process(SedaProducer.java:144) 
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) 
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109) 
    at org.apache.camel.processor.UnitOfWorkProducer.process(UnitOfWorkProducer.java:68) 
    at org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:375) 
    at org.apache.camel.impl.ProducerCache$2.doInProducer(ProducerCache.java:343) 
    at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:233) 
    at org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:343) 
    at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:201) 
    at org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:128) 
    at org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:115) 
    at org.apache.camel.impl.DefaultProducerTemplate.sendBodyAndHeader(DefaultProducerTemplate.java:182) 
    ... 116 common frames omitted 

Я попытался добавить эту строку в маршрут только после вызова split:

.timeout(1000L * 60) 

, но безрезультатно - исключение все еще бросается через 30 секунд.

Любые идеи, как я могу увеличить таймаут, который действует здесь?

ответ

1

таймаут происходит от VM конечной точки, см (VM расширяет Seda)

Вы можете установить более высокое время ожидания там, или настроить его, чтобы не ждать, пока задача, чтобы закончить.

+0

Извините, Клаус, вы можете уточнить это для меня более подробно? Я попытался изменить первую линию моего маршрута от этого: из («ВМ: getQuotes») к этому: из («ВМ:? GetQuotes таймаут = 90000») Но я все еще получаю тайм-аут 30сек , Где/как именно я переопределяю тайм-аут? Спасибо – IrishGuy

+0

Наконец, вернемся к этому после недели хиппинга и суеты (когда все, что я хочу сделать, это взломать). В любом случае, ошибка, которую я делал, заключается в том, что даже если я определил таймаут в определении маршрута следующим образом: '' vm: getQuotes? Timeout = 90000 "' , я все еще просто использовал '' vm: getQuotes "' когда я нажал сообщение на маршрут следующим образом: 'производитель.requestBodyAndHeader (« vm: getQuotes? timeout = $ {responseTimeout} », ...)' Как только я изменил этот вызов, он просто сработал: 'производитель.requestBodyAndHeader (" vm: getQuotes? timeout = $ {responseTimeout} ", ...)' Еще раз спасибо Клаус. – IrishGuy

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