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