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

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

黄舟
黄舟

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

모든 응답(8)
洪涛

Java의 경우 Quartz를 사용하는 것이 좋습니다.
1. Quartz는 다양한 예약된 작업을 수행하는 데 매우 편리합니다.
2. 동일한 작업이 클러스터에서만 실행되도록 하는 것이 원칙입니다. 데이터베이스 테이블을 통한 하나의 서비스.

左手右手慢动作

가장 간단한 방법으로 quartz을 사용한다고 가정하면 코드에서 이를 수정하고 작업 로직에 잠금을 획득하는 작업을 추가해야 합니다. 이 잠금을 데이터베이스에 적용할 수 있습니다. : 비즈니스에 중요한 줄을 삽입합니다. 기본 키 레코드가 실행되면 클러스터에서 동일한 작업을 한 번만 삽입하면 성공합니다. 즉, 잠금을 획득하고 실행할 수 있음을 의미합니다. 그렇지 않으면 작업이 종료되고 실행됩니다. 실행되지 않습니다.

Ty80

JDBC-JobStore로 클러스터링 구성

Quartz의 클러스터링 기능은 장애 조치 및 로드 밸런싱 기능을 통해 스케줄러에 고가용성과 확장성을 모두 제공합니다.

quartz 자체는 클러스터링, 내결함성 및 로드 밸런싱을 지원합니다. 이는 코드를 변경하지 않고도 달성할 수 있습니다.

巴扎黑

quartz 프레임워크는 클러스터링을 지원합니다

左手右手慢动作

예약된 작업의 트리거와 메시지 구독 및 소비를 구체적으로 관리하는 미들웨어 시스템을 구축할 수 있습니다. 시간이 트리거되면 메시지가 전송되고 클러스터 시스템이 이 메시지를 구독합니다. 메시지는 클러스터의 모든 시스템에 무작위로 전달될 수 있습니다.

左手右手慢动作

기계가 타이밍을 시작하면 메시지를 다른 기계에 브로드캐스팅합니다. 그런데 각 기계의 시간 간격이 문제인데 메시지가 전송되기 전에는 모두 정기적으로 켜져 있습니다...

阿神
  1. Zookeeper, redis 등을 사용하여 예약된 작업 실행 상태 및 기타 정보를 수동으로 저장하여 한 번만 실행되도록 합니다.

  2. 예약된 작업을 별도의 프로젝트로 추출하지만(단일 시스템에서 실행) 작업의 특정 콘텐츠는 원격 호출(dubbo, mq 등)을 통해 특정 분산 서비스를 호출합니다. 즉, 예약된 작업은 작업 트리거에만 사용되며 특정 작업은 분산 방식으로 실행됩니다.

  3. Uncode-Schedule 등 다양한 분산 작업 스케줄링 시스템을 활용하세요

Ty80

독립형 프로그램을 만드는 경향

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿