2016-11-02 3 views
0

Дорогие мастера Camel/Akka/Netty!Akka + Camel + Контекст-провайдер

Я создал UntypedConsumerActor, который потребляет соединение TCP:

public class TcpEndpoint extends UntypedConsumerActor { 

    private static final Logger log = LoggerFactory.getLogger(TcpEndpoint.class); 

    public static Props props = Props.create(TcpEndpoint.class); 

    @Override 
    public String getEndpointUri() { 
     return "netty4:tcp://localhost:8000?decoders=#fdDecoder,#fdHandler"; 
    } 

    @Override 
    public void onReceive(Object message) throws Throwable { 
     log.error("onReceived"); 
    } 

} 

В случае настройки декодеров для Нетти компоненты, я создал ContextProvider:

public class FDCamelContext implements ContextProvider { 

    public DefaultCamelContext getContext(ExtendedActorSystem system) { 
     JndiRegistry registry = new JndiRegistry(); 
     registry.bind("fdDecoder", new FDDecoder()); 
     registry.bind("fdHandler", new FDHandler()); 

     DefaultCamelContext context = new DefaultCamelContext(registry); 
     return context; 
    } 
} 

Теперь, когда я отправить сообщение там нет вызова метода onReceive. Зачем? Когда я устанавливаю DefaultContextProvider и настраиваю netty для использования текстовых строк, все работает так, как ожидалось.

ответ

1

Хорошо, я нашел проблему. Может быть, это поможет кому-то:

Это necesarry огонь channelRead событие:

ctx.fireChannelRead(msg);