camelルーティングジャンプコンポーネント使用

2990 ワード

よく使われるのは以下のコンポーネントで、次のコンポーネントは消費者としてもよいし、生成者としてもよい.
一、vm 
まず、このコンポーネントは非同期であり、camelContextにまたがっています.使用方法は次のとおりです.
 from("vm:bar?concurrentConsumers=5")
上記の使用方法には 
concurrentConsumers=5のパラメータ、このパラメータは非常に重要で、このコンポーネントを使用することを提案する時、すべて設定を覚えていて、これはvmの生成者と消費者が同じスレッド内にあるべきではありませんて、彼らの通信の中間は1つのBlockingQueueを隔てて、つまり消費者はこのblockingQueueの中からメッセージを取って消費したのです.concurrentConsumers=5は、5つのスレッドが同時に消費できるように準備されていることを意味し、設定しないと、同時にアクセス量が高く、処理時間が長くなると、大量のエラーが発生しやすい.
org.apache.camel.ExchangeTimedOutException: The OUT message was not received within: 30000 millis. Exchange[HttpMessage@0x630b92a6]
        at org.apache.camel.component.seda.SedaProducer.process(SedaProducer.java:144)[169:org.apache.camel.camel-core:2.15.2]
        at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:129)[169:org.apache.camel.camel-core:2.15.2]
        at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[169:org.apache.camel.camel-core:2.15.2]
        at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448)[169:org.apache.camel.camel-core:2.15.2]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[169:org.apache.camel.camel-core:2.15.2]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[169:org.apache.camel.camel-core:2.15.2]
        at org.apache.camel.component.jetty.CamelContinuationServlet.service(CamelContinuationServlet.java:162)[344:org.apache.camel.camel-jetty-common:2.15.2]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)[96:org.apache.geronimo.specs.geronimo-servlet_3.0_spec:1.0.0]
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)[101:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1496)[101:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v2015

つまり、1つのスレッドはもう処理できないので、設定します.
concurrentConsumersパラメータなので、ここでは非同期要件がなければdirect-vmというコンポーネントを直接使用すれば、以上のエラーは発生しないことをお勧めします.
はい、私たちが構成したとき、toがこのvmに着いたとき、非同期の役割は現れませんでした.私たちはvmの処理が終わってから、次のルートに走ることができます.例えば、
		
		   
		   
		   
		

だからvmにパラメータを設定します
waitForTaskToComplete=Neverこれで非同期効果
waitForTaskToComplete=Never"/>

詳細は公式サイトを参照してください.
http://camel.apache.org/seda.html
二、direct-vm
このコンポーネントは私たちが現在よく使用しているもので、同期してcamelContextにまたがっています.つまり、消費者と生産者の間には
blockingQueueは、同じスレッドにあります
三、seda
このコンポーネントは非同期でcamelContextにまたがらず、vmと同じ使い方です.
四、direct
これは同期でスパンしない
camelContextの