2016-04-14 3 views
2

私はキャメルの2.14.1を使用して、エンドポイントの束にメッセージをルーティングしていますを使用して/無効のエンドポイントを有効にする方法:私は動的に有効にしたいキャメル:例えば、CamelContext

from(...) 
... 
.to(monitoringEndpointId, broadcastEndpointId); 

/これらのエンドポイント/ルートを無効にします実行時にこれまでのところ私は、たとえば、CamelContextstopRoutesuspendRouteメソッドを使用しようとしました:

camel.suspendRoute(broadcastEndpointId) 

しかし、これは、次の例外が発生:

An unknown exception occurred: 
org.apache.camel.component.direct.DirectConsumerNotAvailableException: No consumers available on endpoint: Endpoint[direct://broadcast]. Exchange[JmsMessage[JmsMessageID: ID:NB137-38323-1460630272896-5:1:1:1:1356]] 
    at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:47) 
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:120) 
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72) 
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:416) 
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) 
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:118) 
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) 
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) 
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:105) 
    at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:87) 
    at org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:103) 
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:685) 
    at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:623) 
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:591) 
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:308) 
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:246) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1142) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1134) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1031) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:722) 

だから、これは実際に動作しますが、ログがありますこれらの例外に満ちています。私が欲しいものを達成する良い方法はありますか?

+0

を経ます:http://camel.apache.org/content-based-router.html –

答えて

2

以下に示すように、あなたのルートにルートIDを与える -

from("activemq:queue:test") 
.routeId("myrouteid") 
.to("file:///hello"); 

を次にあなたがラクダのコンテキストを使用してルートを中断し、再開を使用することができます -

camelContext.suspendRoute("myrouteid") or camelContext.resumeRoute("myrouteid") 

詳細についてはあなたが動的であるためにあなたのルートを設定することができますhttp://camel.apache.org/lifecycle.html

+0

'#suspendRoute()'はまさに私が試したものです。そのため、私は 'DirectConsumerNotAvailableException'を取得しています。その目的を失うことなくその例外を無視/呑み込むオプションはありますか? –

+0

suspendRouteは、完全なルートを中断するために使用されます。ダイナミックルーティングを実行する場合は、受信者リストEIPまたはダイナミックルーターEIPを使用します。 [受信者リスト](http://camel.apache.org/recipient-list.html)、[Dynamic Router](http://camel.apache.org/dynamic-router.html) –

0

1つのアプローチは、フィルタを使用することができます。そして、「スイッチ」にとプロパティを使用してオフにエンドポイント:

<filter> 
     <simple>${properties:endpoint1.isEnabled}</simple> 
     <to uri="direct:endpoint1"/> 
    </filter>