代码是这样的:
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.
我试图通过延迟消息来规避问题,但它没有帮助。我可以通过禁用死锁来解决错误,但这不是解决方案。
有人可以帮忙吗?
答案 0 :(得分:0)
您是否在编码器/解码器中调用了ChannelFuture.await(..)?如果没有那么它可能是camel-netty组件。在任何情况下,您都不应该在I / O-Thread中调用ChannelFuture.wait(..)。