2016-01-29 17 views
5

私は、再販のエンドポイントを呼び出すラクダのJava DSLルートを持っています。そして私は手動で同じことをヒットすると、ルートは問題なく動作します。私はコードを要求の大きな数をポンピングしようとする。しかし、私はApache camelコンポーネントオプションを設定しても、Restlet付きの接続プールタイムアウト

タイムアウトがプールからの接続を待っている」と、次の取得しています同じの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個の要求を受け入れなかったが、私はのgettin開始しましたgエラー。そして構成から私はmaxThreadsがデフォルトで10であることを見ることができました。つまり、私がBeanを介して行ったことが正しくピックアップされていないことを意味します。

+0

で、個別の設定クラスと使用春ブート構成アノテーションを作成し、定義されたのRestlet設定前にBeanを実行してから、すべてがうまくいった。 –

+0

他の人に役立つように、あなたの解答を記入してください。 –

答えて

2

ルートconfigureが

public class RoutesBuilder extends FatJarRouter { 

.... 

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

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

以下のように、すなわち、後に実際に私のコードで私はのRestlet Beanを定義しているとIE最初、私は以下のようにRestletおよびルートの設定を定義しているとして、今、私は、コードを定義する順番を変更しました。その場所で、私はrestletの設定が選択されているのを見て、私は接続プールの問題を見ていません。

public class RoutesBuilder extends FatJarRouter { 

.... 

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

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


} 
1

これらの事を確認してください:

  1. あなたは春のAppコンテキストXMLファイルで<context:annotation-config/>を有効にしていることを確認してください。
  2. Spring XMLに<context:component-scan base-package="<your package>" />を使用してください。
  3. @Beanには@Configurationが含まれていることを確認してください。
  4. name属性を@Bean@Bean(name={"restlet"})に追加します。

希望があれば。

+0

私のアプリケーションはcamel-spring-bootアプリケーションですので、あなたが言及した最初の3つの項目が気になります。私は4に指摘されているようにBeanに名前を付けましたが、まだ私は問題を見ています。以下のような私のroutesbuilderクラス外観: はSpringBootApplication [で] パブリッククラスRoutesBuilderがFatJarRouter延び{ 公共ボイド構成を(上書き【で】 .....)を持つJAXBException { .....} をスロー} –

0

この例を見てください。そのスプリングブートAPP。私は、コードに小さな変更をしたスタートアップスプリングブートはないのように、ここで

を必要なすべての設定は、作業溶液を https://github.com/RakeshBhat/rb-springbootcamelrestlet

関連する問題