Тупик при использовании 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 получит его, отправит ответ и перешлет его. И теперь генерируется второе сообщение, оно отправляется в 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. 

Я пытался обойти проблему, задерживая сообщения, но это не помогает. Я могу обойти ошибку, отключив тупик, но на самом деле это не решение.

Кто-нибудь может помочь?


person user1047833    schedule 15.11.2011    source источник


Ответы (1)


Вы вызываете ChannelFuture.await(..) в своем кодере/декодере? Если нет, то это может быть компонент верблюжьей сети, который делает это. В любом случае вы никогда не должны вызывать ChannelFuture.wait(..) из I/O-Thread.

person Norman Maurer    schedule 16.11.2011
comment
Ага. Вам лучше связаться с командой Camel или ее сопровождающим Netty Connector, чтобы сообщить об этой ошибке. - person trustin; 17.11.2011
comment
Я не вызываю ChannelFuture.await(), я использую DelimiterBasedFrameDecoder, StringDecoder, OneToOneDecoder и OneToOneDecoder еще раз. Все, что делают методы в OneToOneDecoders, работает со строками. Все, что делают декодеры Delimiter и String, расширяют этот класс и вызывают их функциональные возможности. Где я должен сообщить об этом команде netty? - person user1047833; 17.11.2011