私は深刻な問題があります。私は、複数のメッセージをnettyに送信する必要がある状況を持っています。これらのメッセージはすべて同じ場所にあるラクダによって生成され、すべての単一のメッセージに応答します。Apache Camelでnettyを使用した場合のデッドロック
コードは、そのようなものです:splitMessageクラスは、少なくとも10件のメッセージを生成し
from("direct:status")
.split().method("splitMessage", "split").to("direct:device")
from("direct:device")
.to("netty:tcp://4533sync=true&decoders=#myDecoders&encoders=#myEncoders")
.to("direct:send")
、そうでない場合より
最初のメッセージが生成されたら、その後、ネッティーがそれを受け取ります、それが送信されます返信して転送してください。 そして、2番目のメッセージが生成され、それがnettyに送信され、問題が開始されます。私はいつもそのようなエラーが表示されます:
2011-10-14 10:27:14,326 [ent worker #1-3] ERROR DefaultErrorHandler - Failed delivery for exchangeId: ID-Stenver-LapTop-60537-1318576334993-0-24. Exhausted after deliver y attempt: 1 caught: java.lang.IllegalStateException: await*() in I/O thread causes a dead lock or sudden performance drop. Use addListener() instead or call await*() from a differ ent thread.
java.lang.IllegalStateException: await*() in I/O thread causes a dead lock or sudden performance drop. Use addListener() instead or call await*() from a different thread.
を私がメッセージを遅延させることによって、問題を回避しようとしたが、それは助けをdoesntの。私はデッドロックを無効にすることでエラーを回避することができますが、実際には解決策ではありません。
誰でも手助けできますか?
うん。このバグを報告するには、CamelチームまたはNettyコネクターのメンテナーに連絡することをお勧めします。 – trustin
私はChannelFuture.await()を呼び出していません DelimiterBasedFrameDecoder、StringDecoder、OneToOneDecoderおよびOneToOneDecoderをもう一度使用しています。 OneToOneDecodersでメソッドが行うことは、文字列で処理されています デリミタと文字列デコーダはすべてそのクラスを拡張し、その機能を呼び出します どこでこれをnettyチームに報告する必要がありますか – user1047833