우리는 하나의 머리 통증이있는 상당히 간단한 폭풍 토폴로지를 가지고 있습니다.스톰 토폴로지의 선택적 스트림
볼트 중 하나는 처리 할 데이터를 찾을 수 있으며 모든 것이 정상적으로 스트림을 계속 수행하거나 유효하지 않으나 해결할 수 있습니다. 어떤 경우에는 추가 처리를 위해 보내야합니다.
이 단계를 토폴로지의 일부로 별도의 볼트 및 스트림으로 만들려고했습니다.
declarer.declareStream(NORMAL_STREAM, getStreamFields());
declarer.declareStream(ERROR_STREAM, getErrorStreamFields());
다음과 같이 실행 방법이 끝납니다.
if(errorOutput != null) {
collector.emit(ERROR_STREAM, input, errorOutput);
}
else {
collector.emit(NORMAL_STREAM, input, output);
}
collector.ack(input);
이 작품은, 그러나 그것은 실패하고 끝없이 주둥이로 다시 보내 얻을이 오류 경로를 아래로 이동하지 않는 튜플의 모든 원인의 차단 효과가 않습니다.
오류 볼트는 수신하지 못한 메시지에 대해 acks를 보낼 수 없지만 acker는 토폴로지의 모든 볼트를 기다렸다가 ack를 다시 보내서 주둥이로 되돌려 보내기 때문입니다. 적어도 오류 처리 볼트를 꺼내면 모든 것이 스파우트로 올바르게 되돌아갑니다.
이 같은 것을 달성하는 가장 좋은 방법은 무엇입니까?
의 병렬 처리 수를 증가. 말 그대로 그 일을 할 일이 없습니다. execute 메소드는 모든 데이터가 올 바르면 오류 볼트에서 호출되지 않습니다. 그러나 스파우트는 ui에 실패한 튜플을 많이 보여줍니다. –
그러나 다른 볼트가 시간이 많이 소요되는 속도가 훨씬 느립니다. 올바른 방향으로 주셔서 감사합니다. –