Los subprocesos no se ejecutan simultáneamente en el servidor Netty UDP

El código que estoy analizando crea un servidor UDP con Netty NioDatagramChannelFactory. Crea un grupo de hilos con:

<code>ExecutorService threadPool = Executors.newCachedThreadPool();
</code>

Luego el canal de datagramas, pipelineFactory & bootstrap:

<code>int workerCount = 10;
DatagramChannelFactory datagramChannelFactory = new NioDatagramChannelFactory(threadPool, workerCount);
ChannelPipelineFactory pipelineFactory = new SNMPTrapsPipeLineFactory();

ConnectionlessBootstrap bootStrap = new ConnectionlessBootstrap(datagramChannelFactory);
bootStrap.setPipelineFactory(pipelineFactory);
bootStrap.bind(new InetSocketAddress(host, port));
</code>

En el pipelineFactory, el getPipeline () agrega los controladores personalizados.

Así como se dice en:Manejo multihebra de mensajes UDP

Sólo hay un hilo procesando los mensajes recibidos. En los registros, los nombres de los hilos aparecen comoNuevo trabajador de datagramas de E / S # 1 me gusta:

2012-04-20 09: 20: 51,853 Nuevo trabajador de datagramas de E / S # 1 '-' 1 INFO [c.e.m.r.s.h.SNMPTrapsRequestHandler: 42] messageReceived | Procesando: V1TRAP [reqestID = 0, ...]

Leí la documentación y esta entrada:Lote de solicitudes UDP perdidas en el servidor UDP con Netty

Y luego cambié un poco el código según esas entradas. Ahora el grupo de hilos se crea con:

<code>int corePoolSize = 5;
ExecutorService threadPool = new OrderedMemoryAwareThreadPoolExecutor(corePoolSize, 1048576, 1048576);
</code>

Y el pipelineFactory con y ExecutionHandler:

<code>ExecutionHandler executionHandler = new ExecutionHandler(threadPool);
ChannelPipelineFactory pipelineFactory = new SNMPTrapsPipeLineFactory(executionHandler);
</code>

Y el getPipeline () agrega el controlador como se describe:

<code>public class SNMPTrapsPipeLineFactory implements ChannelPipelineFactory {

    private ExecutionHandler executionHandler = null;

    public SNMPTrapsPipeLineFactory(ExecutionHandler executionHandler) { 
        this.executionHandler = executionHandler;
    }

    @Override
    public ChannelPipeline getPipeline() throws Exception {

        ChannelPipeline pipeline = Channels.pipeline();
        pipeline.addFirst("ExecutorHandler", executionHandler);

        // Here the custom handlers are added
        pipeline.addLast( ... )
    }
</code>

Ahora, obtengo 4 nombres de hilos diferentes en los registros. Aparecen comopool-2-thread-1, pool-2-thread-2, etc ...

Por ejemplo:

2012-05-09 09: 12: 19,589 pool-2-thread-1 INFO [c.e.m.r.s.h.SNMPTrapsRequestHandler: 46] messageReceived | Procesando: V1TRAP [reqestID = 0, ...]

Pero no se procesan al mismo tiempo. El procesamiento en messageReceived () debe finalizar en un hilo para que el siguiente procese el siguiente mensaje. Envié una gran cantidad de mensajes de diferentes clientes al servidor, y los registros que recibo no están entrelazados. También intenté Thread.sleep () dentro de messageReceived (), y confirma el anterior.

¿Me estoy perdiendo de algo? ¿Hay alguna manera de lograr un servidor UDP de multiproceso REAL con Netty? ¿Cómo puedo obtener diferentes hilos para ejecutar messageReceived () al mismo tiempo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta