将netty与Apache Camel一起使用时出现死锁

将netty与Apache Camel一起使用时出现死锁,netty,Netty,我有一个严重的问题。我的情况是,我需要向netty发送多条消息,这些消息都是由camel在同一个位置生成的,然后得到对每条消息的响应 代码是这样的: from("direct:status") .split().method("splitMessage", "split").to("direct:device") from("direct:device") .to("netty:tcp://4533sync=true&decoders=#myDecoders&encode

我有一个严重的问题。我的情况是,我需要向netty发送多条消息,这些消息都是由camel在同一个位置生成的,然后得到对每条消息的响应

代码是这样的:

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") 
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. 
splitMessage类至少生成10条消息(如果不是更多的话)

在生成第一条消息后,netty将接收它,它将发送回复并转发它。 现在生成了第二条消息,它被发送到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") 
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. 
我曾试图通过延迟消息来规避这个问题,但没有任何帮助。我可以通过禁用死锁来克服错误,但这并不是真正的解决方案


有人能帮忙吗?

你打电话给ChannelFuture。在编码器/解码器中等待(…)?如果不是,则可能是骆驼网组件完成了此操作。在任何情况下,都不应该从I/O线程中调用ChannelFuture.wait(..)。

是的。您最好联系Camel团队或其Netty connector维护人员报告此错误。我不是在调用ChannelFuture.Wait(),我是在再次使用DelimiterBaseFrameDecoder、StringDecoder、OneToOneDecoder和OneToOneDecoder。这些方法在OneTooneDecoder中所做的一切,就是处理字符串,而Delimiter和字符串解码器所做的一切,就是扩展这个类并调用它们的功能,我应该在哪里向netty团队报告呢