2016-12-12 4 views
1

Akka 스트림 응용 프로그램에서 응용 프로그램이 충돌하거나 노드가 다운되면 기내 메시지가 손실 될 위험이 있습니다.Akka 스트림 : 지속성 큐 또는 이벤트 소싱 사용

우리가 메시지를 잃지 않도록하기 위해 할 수있는 일은 응용 프로그램이 돌아 오면 수행됩니다.

내 응용 프로그램에서 mapAsyns IO 호출 및 일부 사소한 CPU 바운드 작업을 수행합니다.

순수한 Akka 응용 프로그램에서 영구 대기열 또는 이벤트 소싱 중 하나를 선택합니다. 그러나 기본 대기열에 액세스 할 수 없기 때문에 Akka 스트림의 경우 스트림 안의 메시지가 손실되지 않도록하려면 어떻게해야합니까?

답변

2

충돌이 발생하면 마지막 싱크 포인트를 기준으로 스트림 싱크를 체크 포인트 한 다음 원본을 다시 시작해야합니다. 당신은 체크 포인트를 수행하고 당신이 언급 한 것처럼 영속 대기열 또는 이벤트 소싱을 사용하여 재개 할 수 있습니다.

+0

원본에서 재생을 지원하지 않으면 실제 소스 (Rabbit MQ 또는 Kinesis)에서 데이터를 가져와 영구 저장소로 푸시하는 사용자 정의 빌드가 필요합니다. 내 소스를 체크 포인트로 재설정하려면 스트림을 구체화하는 동안 사용자 지정 논리가 필요합니다. 어떻게하면 더 일반화 할 수 있으며 최선의 노력을 한 번 전달할 때 스트림의 모든 단계를 밟을 수 있다고 말할 수 있습니까 (최선의 노력은 한 번 제공되지는 않지만 아이디어를 얻은 것 같습니다). – anindyaju99

+0

글쎄, 당신의 소스가 트랜잭션이 아니라면, 당신이 그것을 잘라내는 어떤 방법 으로든 트랜잭션을 만들어야 할 것입니다. 읽기를 차단하거나 읽지 못하게 할 수 있다면 스트림으로 읽을 수 있고 영구적 인 액터에 쓸 수 있으며 모든 작업이 완료되면 확인을 해제 할 수 있습니다. – easel