黄舟2017-04-18 09:28:19
발기부전이란 일반적으로 해당 방법이 사업상태를 바꾸지 않는다는 의미이므로 반복 호출의 효과가 단일 호출의 효과와 동일함을 보장할 수 있습니다.
귀하의 설명을 보면 예약된 작업 및 비동기 처리로 인해 비즈니스 상태(예: 데이터 삽입)가 변경될 가능성이 높습니다. power 잠깐만요. 이런 경우에는 기본적으로 해결책이 없습니다.
질문의 실제 아이디어는 다음과 같습니다. 분산 환경에서 예약된 작업 및 비동기 처리에 대해 반복 요청을 보낼 때 실제 비즈니스 로직이 실행되도록 하는 방법 한번?
그렇다면 중앙 집중식 저장소(예: redis)를 사용하여 호출자 요청 기록을 저장할 수 있습니다. 요청을 받은 후 서버는 원자 쿼리 및 저장 작업(예: redis의setnx 명령)을 사용합니다. , 하나의 요청만 성공적으로 저장되도록 하면 실제 비즈니스를 한 번만 실행하는 효과를 얻을 수 있습니다. 으아악
PHPz2017-04-18 09:28:19
저는 이 분야에 대한 경험이 없지만, 회사의 접근 방식은 IP를 사용하여 판단하고 지정된 IP만이 이 예정된 작업을 실행할 수 있다는 것입니다.
다음은 실제 경험이 없는 개인적인 환상입니다.
예약된 작업을 처리하기 위해 특별히 공개 애플리케이션을 구축한 다음 특정 애플리케이션이 호출할 메시지 인터페이스를 제공합니다.
PHP中文网2017-04-18 09:28:19
+1 연산을 = 연산으로 변경하는 등 연산 자체를 멱등성으로 만듭니다
각 작업에 ID를 부여하고 각 실행을 기록하기 전에 이 ID를 사용하는 작업이 이전에 실행되었는지 확인하세요.
大家讲道理2017-04-18 09:28:19
RabbitMQ 등과 같은 확인 메커니즘이 있는 메시지 대기열을 고려해 볼 수 있습니다. 이는 작업이 한 명의 작업자에게만 할당되도록 할 뿐만 아니라 작업 성공의 무결성도 보장합니다.
巴扎黑2017-04-18 09:28:19
인정된 답변을 포함하여 지금까지의 모든 답변이 잘못되었습니다. 그 이유는 예약된 작업이나 비동기 처리는 멱등성과 관련이 없기 때문입니다.