我正在创建一个Web应用程序,在这里我将创建许多服务和执行器来完成一些任务。我已经扩展了dispacter servlet并在init方法中启动了执行程序或其他线程。这是正确的方法吗?
现在假设任何请求到来并且执行者或类似任务执行线程在抛出异常后死亡。
1.我认为它也会影响其他请求。那么在这种情况下我该怎么办?
2.如何创建一个监视器线程来检查执行线程和执行器的所有关键任务是否正常运行?
3.在这种情况下,我是否应该准备另一个备份执行人并推迟接管失败的遗嘱执行人?如果是,那么如何?
答案 0 :(得分:1)
这是一个旧的,但也许它可以帮助别人:)
对于ExecutorService,有一个关于如何在Codahale度量标准中解决问题的一个很好的例子:https://github.com/dropwizard/metrics/blob/master/metrics-core/src/main/java/com/codahale/metrics/InstrumentedExecutorService.java
我没有找到任何对Spring AsyncTaskExecutors有用的东西:/
答案 1 :(得分:0)
自从我使用了Executor以来已经有一段时间了,您使用的是Java,Spring中的内置执行程序之一,还是您自己编写? Spring有很多,我认为Java为您提供了两到三个具体实现。
无论如何,我认为答案是推出某种监控服务,比如可能使用JMX的东西。如果你想自动魔术地连接你的Executors,你可以使用ApplicationContextAware界面来获得对ApplicationContext的引用,getBeansOfType()有一个名为{{3}}的方法。如果您想采用更直接的方法,那么您只需编写监控服务即可直接在其中注入执行程序。
另一种选择是获得外部监控框架/应用程序。类似Dynatrace的东西,它附加到JVM进程并监视事物,或者,如果你不介意切换应用程序服务器,SpringSource的tcServer,它有可选的仪表化Spring JAR并且提供了大量的不合适的东西。 -box monitoring。