2016-11-08 6 views
0

キャメルレストコールを使用して長い操作をトリガーしたい。操作にはかなりの時間がかかるため、要求はタイムアウトになり、クライアント側でエラーメッセージが表示されます。私はこれが起こることを望んでいない。キャメルレストサービスを使用して長い操作をトリガーする

<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"> 
    <property name="brokerURL" value="tcp://0.0.0.0:61616" /> 
    <property name="userName" value="admin"/> 
    <property name="password" value="admin"/> 
</bean> 

<camelContext xmlns="http://camel.apache.org/schema/blueprint" trace="true"> 
    <route> 
     <from uri="cxfrs:bean:rsprovider" /> 
     <setBody> 
      <simple>${header.operationName}</simple> 
     </setBody> 
     <to uri="activemq:queue:myqueue"/> 
     <!-- Send immediate response to client as, the processing will take a while --> 
     <setBody> 
      <simple>Received feeder service request to ${header.operationName}. Request will be processed soon.</simple> 
     </setBody> 
    </route> 

    <route> 
     <from uri="activemq:queue:myqueue"/> 
     <convertBodyTo type="java.lang.String"/> 
     <recipientList> 
      <simple>direct-vm:operation-${body}</simple> 
     </recipientList> 
    </route> 
</camelContext> 

をしかし、キューに追加すると、同期しているようだし、応答が時間通りに受信されない:

だから、私は次のようにキューを使用してこの問題を解決しようとしています。このキューを非同期にするにはどうすればよいですか?私は?jms.useAsyncSend=trueをキューのURLに追加しようとしました。しかし、それはうまくいかなかった。

答えて

0

あなたはasyncConsumer

<from uri="activemq:queue:myqueue?asyncConsumer=true"/> 

キャメル2.9を試してみてください:JmsConsumerがExchange 非同期に処理するかどうか。有効な場合、JmsConsumerはJMSキューから次の メッセージを取得し、前のメッセージは(非同期ルーティングエンジンによって)非同期で処理された です。この は、メッセージが厳密に100%ではなく順番に処理される可能性があることを意味します。 が無効(デフォルト)の場合、Exchangeは完全に処理されてから JmsConsumerがJMSキューから次のメッセージを取得します。注: トランザクションが有効になっている場合、asyncConsumer=trueはトランザクションを同期的に実行する必要があるため、 を非同期に実行しません(キャメル 3.0は非同期トランザクションをサポートする可能性があります)。

また、非同期リクエストがAPIを

http://camel.apache.org/async.html

Future<Object> future = template.asyncRequestBody("activemq:queue:myqueue", "<YOUR_MESSAGE>"); 
返信チェック
関連する問題