recherche

Maison  >  Questions et réponses  >  le corps du texte

java - 一个项目在集群中运行,如何让定时任务只运行一次?

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

黄舟黄舟2881 Il y a quelques jours1127

répondre à tous(8)je répondrai

  • PHP中文网

    PHP中文网2017-04-18 10:34:05

    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.

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 10:34:05

    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é.

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 10:34:05

    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.

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:34:05

    Le framework Quartz prend en charge le clustering

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 10:34:05

    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.

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 10:34:05

    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...

    répondre
    0
  • 阿神

    阿神2017-04-18 10:34:05

    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

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 10:34:05

    Tendance à créer un programme autonome

    répondre
    0
  • Annulerrépondre