java - 分布式环境下,定时任务或异步处理如何保持幂等性?
天蓬老师
天蓬老师 2017-04-18 09:26:19
0
9
800
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

모든 응답(9)
黄舟

발기부전이란 일반적으로 해당 방법이 사업상태를 바꾸지 않는다는 의미이므로 반복 호출의 효과가 단일 호출의 효과와 동일함을 보장할 수 있습니다.

귀하의 설명을 보면 예약된 작업 비동기 처리로 인해 비즈니스 상태(예: 데이터 삽입)가 변경될 가능성이 높습니다. power 잠깐만요. 이런 경우에는 기본적으로 해결책이 없습니다.

질문의 실제 아이디어는 다음과 같습니다. 분산 환경에서 예약된 작업 및 비동기 처리에 대해 반복 요청을 보낼 때 실제 비즈니스 로직이 실행되도록 하는 방법 한번?

그렇다면 중앙 집중식 저장소(예: redis)를 사용하여 호출자 요청 기록을 저장할 수 있습니다. 요청을 받은 후 서버는 원자 쿼리 및 저장 작업(예: redis의

setnx 명령)을 사용합니다. , 하나의 요청만 성공적으로 저장되도록 하면 실제 비즈니스를 한 번만 실행하는 효과를 얻을 수 있습니다. 으아악

PHPzhong

저는 이 분야에 대한 경험이 없지만, 회사의 접근 방식은 IP를 사용하여 판단하고 지정된 IP만이 이 예정된 작업을 실행할 수 있다는 것입니다.

다음은 실제 경험이 없는 개인적인 환상입니다.
예약된 작업을 처리하기 위해 특별히 공개 애플리케이션을 구축한 다음 특정 애플리케이션이 호출할 메시지 인터페이스를 제공합니다.

迷茫

트랜잭션을 사용하여 구현, 분산 트랜잭션 또는 메시지 대기열

洪涛
  1. +1 연산을 = 연산으로 변경하는 등 연산 자체를 멱등성으로 만듭니다

  2. 각 작업에 ID를 부여하고 각 실행을 기록하기 전에 이 ID를 사용하는 작업이 이전에 실행되었는지 확인하세요.

大家讲道理

RabbitMQ 등과 같은 확인 메커니즘이 있는 메시지 대기열을 고려해 볼 수 있습니다. 이는 작업이 한 명의 작업자에게만 할당되도록 할 뿐만 아니라 작업 성공의 무결성도 보장합니다.

黄舟

이를 zk 스케줄링을 통해 달성합니다. 분산 환경에서는 최대 하나의 시스템에서만 작업을 실행할 수 있습니다.

巴扎黑

인정된 답변을 포함하여 지금까지의 모든 답변이 잘못되었습니다. 그 이유는 예약된 작업이나 비동기 처리는 멱등성과 관련이 없기 때문입니다.

巴扎黑

redis + 토큰이면 충분합니다

洪涛

큐를 사용하면 한 번만 실행됩니다. 실행에 실패하면 큐로 다시 돌아가서 다음을 기다립니다.

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