java - 一个项目在集群中运行,如何让定时任务只运行一次?
黄舟
黄舟 2017-04-18 10:32:05
0
8
1108

一个项目在集群中运行,如何让定时任务只运行一次?不加限制就会导致重复计算的问题。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(8)
洪涛

Pour Java, il est recommandé d'utiliser quartz
1. Quartz est très pratique pour effectuer diverses tâches planifiées
2 Le principe est de s'assurer que la même tâche n'est exécutée que sur. un service via des tables de base de données.

左手右手慢动作

En supposant que vous utilisez quartz de la manière la plus simple, vous devez alors le modifier dans le code et ajouter l'opération d'acquisition du verrou dans la logique du travail. Ce verrou peut être appliqué à la base de données. : insérer une ligne ayant une signification commerciale Lorsque l'enregistrement de clé primaire est exécuté, une seule insertion du même travail dans le cluster réussira, ce qui signifie qu'il a obtenu le verrou et peut être exécuté. Sinon, le travail sera quitté et. ne sera pas exécuté.

Ty80

Configurer le clustering avec JDBC-JobStore

Les fonctionnalités de clustering de Quartz apportent à la fois haute disponibilité et évolutivité à votre planificateur via des fonctionnalités de basculement et d'équilibrage de charge.

quartz lui-même prend en charge le clustering, la tolérance aux pannes et l'équilibrage de charge. Ceci peut être réalisé sans modifier aucun code.

巴扎黑

Le framework Quartz prend en charge le clustering

左手右手慢动作

Vous pouvez créer un système middleware qui gère spécifiquement le déclenchement des tâches planifiées ainsi que l'abonnement et la consommation des messages. Lorsque l'heure est déclenchée, un message sera envoyé et le système de cluster s'abonnera à ce message. Les messages peuvent être transmis de manière aléatoire à n'importe quelle machine du cluster.

左手右手慢动作

Une machine diffusera des messages à d'autres machines lorsqu'elle commencera à chronométrer. Mais l'intervalle de temps de chaque machine pose problème. Elles sont toutes allumées régulièrement avant l'envoi du message...

阿神
  1. Utilisez zookeeper, redis, etc. pour stocker manuellement l'état d'exécution des tâches planifiées et d'autres informations afin de garantir qu'elles ne sont exécutées qu'une seule fois.

  2. Extrayez les tâches planifiées dans un projet séparé (exécuté sur une seule machine), mais le contenu spécifique de la tâche appelle des services distribués spécifiques via des appels à distance (dubbo, mq, etc.). C'est-à-dire que les tâches planifiées ne sont utilisées que pour le déclenchement de tâches et que des tâches spécifiques sont exécutées de manière distribuée.

  3. Utilisez divers systèmes de planification de tâches distribués, tels que Uncode-Schedule

Ty80

Tendance à créer un programme autonome

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal