与Apache Camel一起使用netty时的死锁

时间:2011-11-15 15:02:47

标签: netty

我有一个严重的问题。我有一种情况,我需要向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") 

splitMessage类至少生成10条消息,如果不是更多

生成第一条消息后,netty会收到它,它会发送回复并转发它。 现在生成第二条消息,它被发送到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. 

我试图通过延迟消息来规避问题,但它没有帮助。我可以通过禁用死锁来解决错误,但这不是解决方案。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您是否在编码器/解码器中调用了ChannelFuture.await(..)?如果没有那么它可能是camel-netty组件。在任何情况下,您都不应该在I / O-Thread中调用ChannelFuture.wait(..)。