12장. 중복 메시지 탐지
AMQ Broker에는 수신한 중복 메시지를 필터링하여 자체 중복 탐지 논리를 코딩할 필요가 없는 자동 중복 메시지 탐지가 포함되어 있습니다.
중복 검색이 없으면 클라이언트는 대상 브로커 또는 연결에 대한 연결이 실패할 때마다 보낸 메시지가 성공했는지 여부를 확인할 수 없습니다. 예를 들어 브로커가 메시지를 수신하고 처리하기 전에 브로커 또는 연결이 실패하면 메시지가 해당 주소에 도달하지 않으며 오류로 인해 클라이언트가 브로커로부터 응답을 받지 않습니다. 반면 브로커가 메시지를 수신하고 처리한 후 브로커 또는 연결이 실패한 경우 메시지가 올바르게 라우팅되지만 클라이언트는 여전히 응답을 수신하지 못합니다.
또한 트랜잭션을 사용하여 성공 여부를 결정하는 것은 이러한 경우에 도움이 되지 않습니다. 예를 들어 트랜잭션 커밋을 처리하는 동안 브로커 또는 연결이 실패하면 클라이언트가 메시지를 성공적으로 전송했는지 여부를 확인할 수 없습니다.
클라이언트가 가정된 오류를 수정하기 위해 마지막 메시지를 다시 보내는 경우 그 결과는 중복된 메시지가 주소로 전송될 수 있으며 이는 시스템에 부정적인 영향을 미칠 수 있습니다. 중복 메시지를 보내면 예를 들어 구매 발주서가 두 번 충족될 수 있습니다. 다행히도 {AMQ Broker}는 이러한 종류의 문제가 발생하지 않도록 자동 중복 메시지를 탐지합니다.
12.1. 중복 ID 캐시 구성 링크 복사링크가 클립보드에 복사되었습니다!
브로커는 _AMQ_DUPL_ID 속성의 수신된 값의 캐시를 유지 관리합니다. 각 주소에는 고유한 캐시가 있습니다. 캐시는 순환 및 고정되어 있습니다. 새 항목은 캐시 공간 요구 사항으로 가장 오래된 항목을 대체합니다.
캐시의 크기를 적절하게 조정해야 합니다. 이전 메시지가 동일한 _AMQ_DUPL_ID 로 새 메시지가 도달하기 전에 id-cache-size 메시지 이상을 도달한 경우 브로커는 복제를 탐지할 수 없습니다. 이로 인해 브로커가 두 메시지를 모두 처리합니다.
절차
아래 설정 예제에서는 BROKER_INSTANCE_DIR/etc/broker.xml 에 요소를 추가하여 ID 캐시를 구성하는 방법을 보여줍니다.
<configuration>
<core>
...
<id-cache-size>5000</id-cache-size>
<persist-id-cache>false</persist-id-cache>
</core>
</configuration>