요구 사항/시나리오:
예를 들어 기사를 2018-5-22 13:51:16에 게시하도록 설정하세요.
3일 후에 알려주세요.
메시지는 만료되면 자동으로 삭제됩니다.
…
잠깐만요, 이런 종류의 요구는 특정 시점에 자동으로 작업을 수행하는 것입니다. 이는 대기열과는 아무 관련이 없는 것 같습니다. 미들웨어나 다른 시간이 필요한지, 상주 프로세스가 필요한지 등이 있습니다.
해야 할 작업을 한 줄씩 테이블에 넣은 다음 프로세스를 지속적으로 새로 고치고 시간 노드에 맞는 작업을 꺼내 실행하는 것으로 이해됩니다.
이 시나리오에 대한 성숙한 솔루션이 무엇으로 구성되어 있는지 알고 싶으십니까?
감사합니다^_^
仅有的幸福2017-05-24 11:35:02
지연된 작업을 사용하세요, https://github.com/ouqiang/go...
직접 구현하고, 타임휠이나 작은 루트 파일을 사용하세요
redis 키스페이스 알림 사용
beanstalkd
曾经蜡笔没有小新2017-05-24 11:35:02
포스터의 핵심은 지연된 메시지 대기열 서비스인 DelayQueue여야 합니다. 구체적인 상황은 다음을 참조하세요.
1. Taobao의 자동 주문 취소 서비스
2. Ele.me의 주문 SMS 알림 서비스 등
대기/알림 방식을 기반으로 타이머를 구현합니다.
伊谢尔伦2017-05-24 11:35:02
crontab 예약 작업을 사용하여 해결할 수 있고, 매일, 매시간, 분마다 호출되도록 Php 인터페이스를 디자인할 수 있습니다.
習慣沉默2017-05-24 11:35:02
프로그램 브러싱을 수행하지만 데이터베이스 압박을 고려해야 합니다.
모든 작업을 대기열에 푸시하고, 무한 루프의 대기열에서 스크립트를 꺼내고, 시점을 비교하고, 작업이 도착하면 실행 모듈에 작업을 던질 수 있습니다. 시간이 끝나지 않으면 반대편으로 계속해서 대기열로 밀어 넣으세요.
대기열이 2개입니다. 예를 들어 실행될 큐: TasteList; 즉시 실행될 큐: runList.
작업 검색과 작업 실행을 서로 다른 프로세스로 나눕니다.
1. 작업 검색: 스크립트는 루프의 TasteList에서 작업을 팝하고, 시점을 결정하고, 시간이 다 되면 작업을 runList 대기열에 푸시합니다. 포인트보다 작으면 계속해서 TasteList에 푸시합니다.
2. 작업을 실행합니다. runList를 반복하여 팝업하고 작업이 있는 즉시 실행합니다.
볼륨이 큰 경우 필요에 따라 프로세스 몇 개만 열면 되며 반복 실행을 생각할 필요가 없습니다.
phpcn_u15822017-05-24 11:35:02
시스템의 예약된 작업 기능을 사용하여 스크립트를 실행하세요. 스크립트의 기능과 수행 방법을 결정할 수도 있습니다. 위의 답변을 참조할 수도 있습니다.
일반적으로 빈도가 높은 스크립트이면 충분합니다(예: 1분에 한 번 또는 5분에 한 번). 스크립트 내에서 시간을 판단한 다음 다양한 빈도의 작업을 호출할 수 있습니다. 이는 설정하는 것보다 관리하기가 훨씬 쉽습니다. 각 빈도 스크립트에 대해 별도로 예약된 작업입니다.