java rest netty nio resteasy

java - Marco de REST sin bloqueo basado en Netty



nio resteasy (6)

¿Has echado un vistazo a Play ?

Parece que estás inclinado a usar Netty, pero si estás dispuesto a mirar a tu alrededor, una configuración muy sencilla de Grizzly + Jersey probablemente funcionará lo suficientemente bien. Heck, una sencilla aplicación Glassfish 4.0 JAX-RS también puede funcionar bien.

Estoy trabajando en una aplicación RESTfull que requiere alta escalabilidad. Estoy considerando marcos basados ​​en Netty para aplicaciones RESTfull. Revisé algunas de las opciones disponibles e intenté obtener lo que pueden ofrecer como una implementación sin bloqueo. Aquí están mis conclusiones:

  1. rest.li -> Todavía en fase experimental para implementaciones de NIO basadas en Netty. Por lo tanto, no está listo para la producción.
  2. RESTEasy -> Proyecto estándar de JBoss que admite Netty 4.x. Pero, en lugar de la implementación de NIO basada en Netty de pila completa, RESTEasy es un intercambio de búfer entre Netty y RESTEasy. No está tomando las ventajas de Netty. Por lo tanto, la escalabilidad no es tan alta como se espera de un marco basado en Netty.
  3. Componente Netty-http -> Otra opción es la integración de Apache Camel al usar el componente Netty-http como un punto final para enrutar las solicitudes a los servicios expuestos desde los beans. Creo que es lo mismo que RESTEasy, solo el componente Netty-http usa las capacidades NIO basadas en Netty y el resto del sistema usaría el antiguo IO. No creo que ayude mucho a obtener escalabilidad.
  4. RESTExpress -> Se afirma que es un marco basado en Netty para la aplicación RESTFull. Pero, ni tiene una comunidad decente, ni se puede confiar (porque es muy nuevo) para aplicaciones empresariales que requieren un alto grado de seguridad.

Antes de tener los resultados anteriores, quería utilizar un marco listo para usar y hacer el trabajo más rápido.

Sé que es una pregunta basada en la opinión. Pero, todavía necesito ayuda para elegir el marco adecuado para mi aplicación. Si en el caso, no hay un marco de REST basado en Netty: ¿sería prudente utilizar el código NIO basado en Netty de bajo nivel en mi aplicación? Cualquier ayuda apreciada. Gracias por adelantado.



Hay un marco más que usa Netty y RxJava, se llama datamill

Si está interesado en crear aplicaciones web utilizando un estilo reactivo funcional, entonces debería considerarlo.


Puede echar un vistazo a AsyncRestTemplate en Spring Framework 4.2.5.RELEASE. Se puede usar encima de Netty.

Nota: de forma predeterminada, AsyncRestTemplate se basa en las instalaciones estándar de JDK para establecer conexiones HTTP. Puede cambiar a usar una biblioteca HTTP diferente, como Apache HttpComponents, Netty y OkHttp, usando un constructor que acepte un AsyncClientHttpRequestFactory.


Si realmente desea que no se bloqueen, debe hacerlo desde cero y tener clientes REST adecuados . De lo contrario, como se indica en mi comentario, la diferencia de rendimiento será despreciable y, en muchos casos, peor para NIO (Netty con uso compartido de subprocesos).

Solo hay dos bibliotecas que conozco que no bloquean desde el principio hasta Vert.x y algo así como Finagle (faltan otras cosas como el acceso a datos sin bloqueo).

También debe saber que Tomcat y otros contenedores de servlet que pueden funcionar con JAX-RS son compatibles con NIO. El problema es que, aunque se admita NIO, seguirá siendo un solo hilo por solicitud. Solo Play, Finagle, Vert.x y Netty puro (independientemente de NIO) admiten un modelo de subprocesamiento compartido diferente y, por lo tanto, tienen diferentes mecanismos para realizar la concurrencia.


Spring 5 viene con un marco web reactivo llamado WebFlux. Puede elegir entre varios servidores como Netty o Undertow. También se ha agregado un WebClient reactivo sin bloqueo a Spring y también tiene soporte para Mongo, Redis y Cassandra reactivos (supongo que pronto habrá más).

Spring Boot, la ''opinión opinada de Spring'', también obtendrá una nueva versión (2.0) basada en Spring 5. Al momento de escribir este artículo, se expected que sea lanzado en febrero.

Más información sobre la pila reactiva de Spring: https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html