Тупик при использовании netty с Apache Camel - PullRequest
0 голосов
/ 15 ноября 2011

У меня серьезная проблема.У меня есть ситуация, когда мне нужно отправить несколько сообщений в 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. 

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

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

1 Ответ

0 голосов
/ 16 ноября 2011

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

...