0

私は深刻な問題を抱えています。複数のメッセージをnettyに送信する必要がある状況があります。これらはすべて同じ場所でキャメルによって生成され、すべてのメッセージへの応答を取得します。

コードは次のようなものです。

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") 

splitMessage クラスは、少なくとも 10 個のメッセージを生成します。

最初のメッセージが生成された後、netty はそれを受信し、返信を送信して転送します。そして、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. 

メッセージを遅らせることで問題を回避しようとしましたが、役に立ちません。デッドロックを無効にすることでエラーを回避できますが、それは実際の解決策ではありません。

誰でも助けることができますか?

4

1 に答える 1

0

エンコーダー/デコーダー内でChannelFuture.await(..)を呼び出しますか?そうでない場合は、それを行うのはラクダのネットコンポーネントである可能性があります。いずれの場合も、I / Oスレッド内からChannelFuture.wait(..)を呼び出さないでください。

于 2011-11-16T15:05:39.487 に答える