2017-10-17 3 views
0

Mon application instancie actuellement et démarre un planificateur par défaut lors du démarrage de l'application à l'aide:Planificateur Quartz non clusterisé: instancier et démarrer le planificateur au démarrage de l'application ... est-ce sûr pour plusieurs machines?

@Override 
public void contextInitialized(ServletContextEvent arg0) { 
    try { 
     Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); 
     scheduler.start(); 
    } catch (SchedulerException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Cette logique fonctionne sur une machine de nuages, ainsi que sur les machines de développement local et quartz.properties est actuellement en mode non-cluster . L'application utilise également JDBC Job Store.

Je suis préoccupé par l'existence d'une instance de planificateur pour chaque machine - s'il vous plaît donnez-moi des recommandations sur la façon de gérer Quartz Scheduler sur plusieurs machines. Ce cas d'utilisation nécessite-t-il un regroupement?

J'ai programmé un déclencheur de test à exécuter toutes les minutes. Bien qu'il n'y ait pas eu d'exécutions d'emplois en double, j'ai remarqué quelques tirs manqués qui n'ont jamais été considérés comme des ratés.

+0

pouvez-vous élaborer votre cas d'utilisation? Ce n'est pas très clair de ce que vous décrivez. Votre cas d'utilisation nécessite plusieurs instances pour partager la charge en formant un cluster ou vous recherchez simplement un support de persistance? Est-ce que chacun de vos nœuds gère sa propre charge de travail? – Srinivas

+0

@Srinivas après avoir joué avec différentes configurations, j'ai trouvé une configuration qui fonctionne pour l'application. J'écrirai plus à ce sujet dans une réponse ci-dessous. – plsplox

Répondre

0

J'ai joué avec la configuration et les paramètres, et j'ai trouvé une configuration qui fonctionne pour mon application. Les serveurs d'applications servent les ressources Web à partir d'une configuration de cluster; mon erreur commençait une non-clustered instance de planificateur dans chaque serveur app.

Pour l'instant, je ne pense pas que cette application nécessite plusieurs machines pour gérer les tâches planifiées pour l'instant. De plus, je n'ai pas compris comment synchroniser les heures système sur nos serveurs cloud, ce qui est une exigence pour la fonctionnalité de clustering de Quartz.

J'ai fini par dédier une seule machine non-cluster qui démarre une instance de planificateur. Cette configuration fonctionne comme prévu, et les bugs bizarres ont disparu (ratés non reconnus, etc.).