난 당신이 filter
및 aggregator
의 행동을 오해라고 말하고 싶지만.
나는 apply-sequence
- 업 그레 이드 구성 요소가 있습니다. 따라서 해당 그룹의 모든 메시지는 여러 헤더 (correlationId
)를 받아 들여 의 메시지를 그룹화합니다. 기본값은aggregator
입니다. sequenceNumber
- 메시지의 index
; sequenceSize
- 그룹의 메시지 수
Filter
은 메시지를 일부 조건으로 확인하고 outpu-channel
또는 discard
로직으로 보냅니다. 메시지를 수정하지 않습니다. 그러나 우리가 그렇게 할 수 있다고하더라도 어쨌든 좋은 소리는 아닙니다.
그룹에 단지 두 개의 메시지 만 있다고 가정합니다. 처음에는 필터링을 위해 OK입니다. 단지 aggregator
으로 보내면됩니다. 그러나 두 번째는 버려지고, 네, 집계 원에게 보내지 않을 것입니다. 그리고 마지막 그룹은 sequenceSize
에 도달하지 않았기 때문에 해당 그룹을 공개하지 않습니다.
귀하의 요구 사항을 극복하기 위해서는 aggregator
에 ReleaseStrategy
을 맞춤화해야합니다 (기본값은 SequenceSizeReleaseStrategy
). 예를 들어 그룹의 모든 메시지가 이후 true
또는 false
결과와 독립적으로 전송 된 시스템의 상태를 확인합니다. 또는 같은 이유로 인해 fake
메시지가 있고 해당 그룹에서 사용 가능 여부를 확인하십시오.
이 경우 수집기에서 메시지를 그룹화하려면 correlationId
에주의해야합니다.
UPDATE
이러한 시나리오에 대한 제안 출시 전략은 무엇입니까? 릴리스 전략으로 타임 아웃을 사용하는 것이 좋은 전략입니까?
가끔은 일부 통합 시나리오에 적합한 솔루션을 찾는 것이 어렵다고 말할 수 있습니다. 메시징은 성격 상 stateless
이므로, 결정되지 않은 수의 메시지를 상관시키고 그룹화하는 것은 문제가 될 수 있습니다.
요구 사항 및 환경을 확인해야합니다.
예를 들어 모든 메시지가 단일 스레드에서 처리 될 때 fake
마커 메시지를 aggregator
으로 직접 보내고 ReleaseStrategy
에서 확인할 수 있습니다. 그룹의 모든 메시지가 삭제 될 때도 작동합니다.
이러한 메시지를 병렬로 처리하거나 다른 스레드에서 수신 한 경우 메시지 순서와 각 프로세스의 시간을 결정할 수 없습니다.
이 경우 TimeoutCountSequenceSizeReleaseStrategy
이 실제로 도움이 될 수 있습니다. 물론 시스템 요구 사항에 따라 적절한 시간대를 찾아야 할 필요가 있습니다.
대단히 감사드립니다. 필터링 및 집계 란 무엇인지 알고 있지만 처음에는 10 개의 레코드가 있지만 일부 필터는 일부 필터를 제외한다고하는 그룹의 릴리스 전략을 작성할 수 없습니다. 입력이 여러 레코드의 큰 세트가 될 수 있기 때문에 얼마나 많은 레코드가 필터링되어 채워지는지 알 수 없습니다. 얼마나 많은 기록을 기다릴 지 아무도 모른다. 필터링이 끝나면 7 또는 8 또는 9 또는 10 개의 레코드가 있습니까? 이러한 시나리오에 대해 제안되는 릴리스 전략은 무엇입니까? release stretegy로 timeout을 사용하는 것이 좋은 전략입니까? –
내 대답을 올렸습니다. (죄송합니다, 실수가 있다면 ...) –
인내심과 긴 설명에 대해 많은 분들께 감사드립니다. –