2016-01-29 8 views
5

У меня есть маршрут Java DSL верблюда, который вызывает конечную точку рестарта. И маршрут работает без каких-либо проблем, когда я ударяю то же самое вручную. Но, когда я пытаюсь накачать большее количество запросов через код я получаю «Таймаут ожидания соединения с бассейном»Apache camel Тайм-аут пула соединений с рестартом даже после настройки параметров компонента

И следующее stackt расы одного и того же:

2016-01-29 14:09:38.650 WARN 20256 --- [pool-3-thread-2] org.restlet        : An error occurred during the communication with the remote HTTP server.org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool 
at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:412) 
at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:298) 
at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:238) 
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:423) 
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863) 
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) 
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) 
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57) 
at org.restlet.ext.httpclient.internal.HttpMethodCall.sendRequest(HttpMethodCall.java:339) 
at org.restlet.engine.adapter.ClientAdapter.commit(ClientAdapter.java:105) 
at org.restlet.engine.adapter.HttpClientHelper.handle(HttpClientHelper.java:119) 
at org.restlet.Client.handle(Client.java:153) 
at org.restlet.Restlet.handle(Restlet.java:275) 
at org.apache.camel.component.restlet.RestletProducer.process(RestletProducer.java:79) 
at org.apache.camel.component.restlet.RestletProducer.process(RestletProducer.java:98) 
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:141) 
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) 
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460) 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) 
at org.apache.camel.processor.Pipeline.process(Pipeline.java:121) 
at org.apache.camel.processor.Pipeline.process(Pipeline.java:83) 
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460) 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) 
at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:668) 
at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:596) 
at org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:237) 
at org.apache.camel.processor.Splitter.process(Splitter.java:104) 
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) 
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460) 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) 
at org.apache.camel.processor.Pipeline.process(Pipeline.java:121) 
at org.apache.camel.processor.Pipeline.process(Pipeline.java:83) 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) 
at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62) 
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:141) 
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) 
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460) 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) 
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109) 
at org.apache.camel.processor.MulticastProcessor.doProcessParallel(MulticastProcessor.java:814) 
at org.apache.camel.processor.MulticastProcessor.access$200(MulticastProcessor.java:84) 
at org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:314) 
at org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:299) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

И согласно документу я сделал настроить Restlet компонент с помощью следующего кода, но я до сих пор видим один и тот же вопрос:

@Bean 
public RestletComponent restlet() 
{ 
    RestletComponent restlet = new RestletComponent(); 
    restlet.setMaxThreads(100); 
    restlet.setThreadMaxIdleTimeMs(10000); 
    restlet.setMaxQueued(20); 
    return restlet; 
} 

Примечание: маршрут было принято 10 запросов в то время я начал получаешь g ошибок. И из конфигурации я мог видеть, что maxThreads по умолчанию - 10. Это означает, что то, что я делал через Bean, не подбирает должным образом.

+0

Я сделал небольшое изменение в код, определенный Restlet Бин перед настройкой, а затем все прошло хорошо. –

+0

Напишите ответ с вашим решением, чтобы другие могли воспользоваться. –

ответ

2

На самом деле в моем коде я определил Restlet боб после маршрута Configure, то есть, как показано ниже

public class RoutesBuilder extends FatJarRouter { 

.... 

@Override 
    public void configure() throws JAXBException { 
    ...... 
} 

@Bean(name={"restlet"}) 
    public RestletComponent restlet() 
    { 
     ....... 
    } 
} 

А теперь я изменил порядок определения кода, как то есть первый я определил Restlet и маршрут Configure, как показано ниже , При этом я увидел, что конфигурация пульта была поднята, и я больше не вижу проблему с пулом соединений.

public class RoutesBuilder extends FatJarRouter { 

.... 

@Bean(name={"restlet"}) 
    public RestletComponent restlet() 
    { 
     ....... 
    } 

@Override 
    public void configure() throws JAXBException { 
    ...... 
} 


} 
1

Проверить эти вещи:

  1. Убедитесь, что вы включили <context:annotation-config/> в файле контекста XML Spring App.
  2. Использовать <context:component-scan base-package="<your package>" /> Весной XML.
  3. Удостоверьтесь, что у вас есть аннотирование содержания, которое @Bean с @Configuration.
  4. Добавить атрибут name к @Bean: @Bean(name={"restlet"}).

Надеюсь, что это поможет.

+0

Мое приложение - приложение для верблюжьей пружины, поэтому первые три вещи, о которых вы упомянули, позаботятся. Я назвал bean как указано в 4, но все же я вижу проблему. Мой routesbuilder класс выглядеть следующим образом: [в] SpringBootApplication общественного класса RoutesBuilder расширяет FatJarRouter { ..... [в] Override общественной Configure недействительными() бросает JAXBException { ..... } } –

0

Взгляните на этот пример. Его Spring-boot APP. Я создал отдельный класс конфигурации и используемой конфигурации аннотацию весна-загрузки, так при запуске весенней загрузки делает все конфигурации необходимо

Вот рабочий раствор, https://github.com/RakeshBhat/rb-springbootcamelrestlet