Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

237
Vistas
eventos de nivel de aplicación en ktor no invocados

Actualmente estoy experimentando con eventos de aplicaciones en ktor usando Netty. Sin embargo, el único enlace al que se llama es "ApplicationStarted". ¿Qué estoy haciendo mal aquí?

Establecí puntos de interrupción en todas las funciones, las suscripciones se realizan pero no se invocan todos los detectores de eventos. También traté de encontrar alguna explicación en los documentos de ktor, pero no tuve éxito.

 import io.ktor.application.* fun Application.events(){ environment.monitor.subscribe(ApplicationStarting, ::onStarting) environment.monitor.subscribe(ApplicationStarted, ::onStarted) environment.monitor.subscribe(ApplicationStopping, ::onStopping) environment.monitor.subscribe(ApplicationStopped, ::onStopped) environment.monitor.subscribe(ApplicationStopPreparing, ::onPrepareStop) } private fun onStarting(app: Application){ app.log.info("Application starting") } private fun onStarted(app: Application){ app.log.info("Application started") } private fun onStopping(app: Application){ app.log.info("Application stopping") } private fun onStopped(app: Application){ app.log.info("Application stopped") } private fun onPrepareStop(env: ApplicationEnvironment){ env.log.info("Preparing App Stop") }

Aparece "Aplicación iniciada" en los mensajes de registro, pero ningún otro resultado.

¿Qué tan mal lo estoy haciendo, o es esto un error?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Ok, estuve investigando esto y descubrí que la cantidad de eventos de nivel de aplicación invocados depende del servidor que esté utilizando. Los siguientes servidores incorporados admiten los siguientes eventos:

+--------+----------+---------+---------------+--- -------+---------+
| Motor | Comenzando | Iniciado | Dejar de preparar | Parando | Detenido |
+--------+----------+---------+---------------+--- -------+---------+
| Neto | NO | SÍ | NO | NO | NO |
| director de información | NO | SÍ | SÍ | SÍ | SÍ |
| gato | NO | SÍ | NO | NO | NO |
| Embarcadero | NO | SÍ | NO | NO | NO |
+--------+----------+---------+---------------+--- -------+---------+

Probado en Ktor versión 1.1.2

Por lo tanto, actualmente parece que si desea responder a eventos de detención de aplicaciones, debe usar CIO como servidor.

EDITAR:

CIO no es compatible con HTTPS a partir de ahora, por lo que, si es necesario, debe ceñirse a uno de los otros tres. Sin embargo, puede usar el enlace de apagado del tiempo de ejecución de JVM para generar un evento detenido usted mismo. Tenga en cuenta que los controladores se invocan en un subproceso diferente.

 private fun onStarted(app: Application){ Runtime.getRuntime()?.addShutdownHook( Thread { app.environment.monitor.raise(ApplicationStopped, app) }) app.log.info("Application started") }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda