2011-11-15 44 views
0

我有一個嚴重的問題。我有一種情況,我需要向netty發送多個消息,這些消息都是由駱駝在同一個地方生成的,然後得到每條消息的響應。與Apache Camel一起使用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,這是問題開始的地方。我總是會得到這樣的錯誤:

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. 

我試圖通過延遲消息來繞過這個問題,但它並沒有幫助。我可以通過禁用死鎖來解決錯誤,但那不是真正的解決方案。

任何人都可以幫忙嗎?

回答

0

您是否在您的編碼器/解碼器中調用ChannelFuture.await(..)?如果不是,那麼它可能是駱駝網狀組件。在任何情況下,你都不應該在I/O線程中調用ChannelFuture.wait(..)。

+0

是的。您最好聯繫Camel團隊或其Netty連接器維護人員以報告此錯誤。 – trustin

+0

我不打電話ChannelFuture.await() 我使用DelimiterBasedFrameDecoder,StringDecoder,OneToOneDecoder和OneToOneDecoder一次。 OneToOneDecoders中的所有方法正在使用字符串 所有分隔符和字符串解碼器都在擴展該類並調用其功能 我應該在哪裏向netty團隊報告此問題 – user1047833