Enrutamiento de ruta de contexto en Tomcat (intercambio de servicios)

Esto es lo que me gustaría lograr:

Tengo un servicio web A que deseo poder implementar junto con otros servicios web de tipo A: versiones diferentes. Por ahora asumo 2 instancias una al lado de la otra. Lo necesito porque el servicio tiene una etapa de calentamiento, que lleva algo de tiempo para construir cosas desde DB y solo después de que está listo puede comenzar a atender solicitudes ...

Estaba pensando en implementar en Tomcat6 rutas de contexto como: "/ServiceA-1.0" , "/ServiceA-2.0" y luego tener un contexto "virtual" como "/ ServiceA" que apuntará al servicio físico deseado, por ejemplo "/ ServiceA- 1.0 " . Por lo tanto, el mundo externo sabrá acerca de ServiceA, pero internamente, mi pila relacionada con ServiceA sabría sobre la URL de ServiceA versionada (hay más componentes involucrados pero solo ServiceA está sirviendo al mundo exterior). Cuando el nuevo servicio está listo, simplemente reconfiguraría el contexto "virtual" para señalar un nuevo servicio.

Hasta ahora, no pude descubrir cómo hacer esto con Tomcat y comenzar a pensar que no es posible. Encontré sugerencias para colocar Apache Server frente a Tomcat y hacer el enrutamiento allí, pero no quiero inscribir otra pieza de software a menos que sea necesario.

Mis preguntas son:
¿es este tipo de contexto y enrutamiento "virtual" que se puede hacer con Tomcat6?
- ¿Alguna otra opción, sabiduría y lecciones aprendidas sobre cómo lograr este tipo de escenario de intercambio de servicios?

Best,
Jozef

Respuesta 1

Dado el período de calentamiento que mencionas, supongo que deseas un servicio más o menos ininterrumpido cuando cambias de implementación. Esto realmente es fácil de manejar con un Apache al frente.

Normalmente disfruto de la flexibilidad que obtengo de esta capa adicional. Apache no es demasiado invasivo en su sistema. Además, si se ejecuta en Unix, es trivial (leer: predeterminado) hacer que Apache escuche en el puerto 80, mientras que tendrá que hacer un esfuerzo adicional para que Tomcat escuche en el puerto 80 y no se ejecute como root .

Si nunca ha tocado Apache, tenga la seguridad de que es fácil de aprender en poco tiempo. Especialmente cuando no necesitas toda la potencia que trae. La configuración de un proxy inverso (o mod_jk) está bien documentada en todas partes. Y la característica que menciona es un híbrido de proxy inverso y equilibrador de carga, incluso si solo tiene un servidor para equilibrar la carga "entre", tendrá dos contextos / versiones diferentes.

No temas al Apache, estás en el camino correcto :)

Respuesta: 2

No recuerdo si Tomcat tiene una capacidad nativa para hacer esto, pero debería poder lograr lo que está buscando con bastante facilidad con un simple servlet de aplicación web. Básicamente, cree un servlet que escuche "/ ServiceA" y redirija todo a la URL que necesita. Puede crear una página de administración simple (¿usar una válvula para controlar el acceso a ella?) O un servicio JMX para controlar el punto final donde desea redirigir.

No es tan simple como usar algo como Apache HTTPD o Lighttpd en el frente, pero probablemente igual de efectivo, y le permite mantener todo dentro de Tomcat si eso es realmente lo que desea.

Pound también es un equilibrador de carga muy rápido / liviano que podría ejecutar frente a su servicio, pero si la memoria funciona, no puede cambiar la configuración sobre la marcha; Tiene que ser detenido y reiniciado. Sin embargo, es muy rápido parar y comenzar o enviar un VISTAZO, por lo que no debería ser demasiado doloroso. Por supuesto, esto significa un binario separado que debe ejecutar / configurar / admitir además de Tomcat.

Estaba leyendo nuevamente su pregunta original y me di cuenta de que nadie respondió su pregunta sobre las advertencias con los servicios de conmutación. No indica si su servicio es apátrida o no, pero debe preocuparse / considerar el impacto de perder sesiones / estados al cambiar entre los dos servicios. Fuera de eso, esperaría que el impacto fuera mínimo.

Respuesta: 3

Estoy tratando de ejecutar una aplicación andriod desde el emulador, pero cada vez que envío una solicitud de URL válida muestra 404 como código de estado. Tengo el siguiente código. si uso http: //10.0.2.2/api/ca/entry/? ...

¿Hay alguna forma de omitir el administrador de diseño para un componente dado en Swing? Algo similar a position = "absolute" en CSS. El diseño nulo no es una opción. Tengo una GUI existente que no puedo modificar ...

Escribí un script que analizaba un archivo .csv en groovy usando tokenize, que terminó no haciendo exactamente lo que necesitaba, estoy tratando de usar la biblioteca openCSV pero no estoy seguro de cómo puedo analizar ...

Recibo una ClassNotFoundException cuando intento definir un controlador para una base de datos SQLServer en código java. ¿Alguien puede aclarar por qué podría ser esto? He visto preguntas similares pero ninguna de sus ...