16.4. 메시지 재배포 활성화
브로커 클러스터에서 온 디맨드 메시지 로드 밸런싱을 사용하는 경우 소비자가 메시지를 사용할 수 없는 큐에 메시지가 "최고"되지 않도록 메시지 재배포 를 구성할 수 있습니다.
이 섹션에는 다음에 대한 정보가 포함되어 있습니다.
16.4.1. 메시지 재배포 이해 링크 복사링크가 클립보드에 복사되었습니다!
브로커 클러스터는 로드 밸런싱을 사용하여 클러스터에 메시지 부하를 분산합니다. 클러스터 연결에서 부하 분산을 구성할 때 메시지 로드 밸런싱 을 ON_DEMAND 에 설정하면 브로커는 소비자와 일치하는 다른 브로커로만 메시지를 전달합니다. 이 동작을 사용하면 메시지를 사용할 소비자가 없는 큐로 메시지가 이동되지 않습니다. 그러나 메시지가 브로커로 전달된 후 큐에 연결된 사용자가 닫히면 해당 메시지는 큐에서 "최고"되지 않습니다. 이 문제를 래비브레이팅(Vla vation )이라고 합니다.
메시지 재배포는 소비자가 일치하는 클러스터의 브로커에 대한 소비자가 없는 대기열에서 메시지를 자동으로 다시 배포하지 못하도록 합니다.
16.4.1.1. 메시지 필터를 사용하여 메시지 재배포 제한 링크 복사링크가 클립보드에 복사되었습니다!
메시지 재배포 는 소비자의 필터 (selector 라고도 함)의 사용을 지원하지 않습니다. 필터가 있는 소비자의 일반적인 사용 사례는 상관 관계 ID를 사용하는 요청-응답 패턴입니다. 예를 들어 다음 시나리오를 고려하십시오.
-
두 브로커,
brokerA및brokerB의 클러스터가 있습니다. 각 브로커는redistribution-delay를0으로 설정하고message-load-balancing을ON_DEMAND로 설정하여 구성됩니다. -
brokerA및brokerB에는 각각myQueue라는 큐가 있습니다. -
요청에 따라 생산자는
brokerA에서myQueue대기열에 라우팅되는 메시지를 보냅니다. 이 메시지에는myCorrelID라는 상관 관계 ID 속성이 있으며 값이10입니다. -
소비자는
myCorrelID=5의 필터를 사용하여brokerA의myQueue큐에 연결합니다. 이 필터는 메시지의 상관 관계 ID 값과 일치하지 않습니다. 다른 소비자는
myCorrelID=10필터를 사용하여brokerB의myQueue큐에 연결합니다. 이 필터는 메시지의 상관 관계 ID 값과 일치합니다.이 경우
brokerB의 소비자 필터가 메시지와 일치하지만myQueue큐에 대한 소비자가에 존재하므로 메시지는 brokerA에서brokerAbrokerB로 재배포 되지 않습니다.
이전 시나리오에서는 요청이 생산자로 전송되기 전에 소비자를 생성하여 원하는 클라이언트가 메시지를 수신하는지 확인할 수 있습니다. 메시지는 메시지의 상관 관계 ID와 일치하는 필터를 사용하여 즉시 소비자로 라우팅됩니다. 재배포가 필요하지 않습니다.
추가 리소스
- 클러스터 로드 밸런싱에 대한 자세한 내용은 16.1.1절. “브로커 클러스터의 메시지 로드 밸런싱 방법” 을 참조하십시오.
16.4.2. 메시지 재배포 구성 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 메시지 재배포를 구성하는 방법을 설명합니다.
절차
-
<
;broker_instance_dir> /etc/broker.xml구성 파일을 엽니다. <
cluster-connection> 요소에서 <message-load-balancing>이 <ON_DEMAND> 로 설정되어 있는지 확인합니다.<configuration> <core> ... <cluster-connections> <cluster-connection name="my-cluster"> ... <message-load-balancing>ON_DEMAND</message-load-balancing> ... </cluster-connection> </cluster-connections> </core> </configuration><
;address-settings> 요소 내에서 큐 또는 큐 집합에 대한 재분배 지연을 설정합니다.이 예에서는
my.queue에 밸런싱된 메시지가 마지막 소비자가 종료된 후 5000밀리초 후에 재배포됩니다.<configuration> <core> ... <address-settings> <address-setting match="my.queue"> <redistribution-delay>5000</redistribution-delay> </address-setting> </address-settings> ... </core> </configuration>address-setting-
메시지를 재배포할 대기열의 이름으로
match속성을 설정합니다. 브로커 와일드카드 구문을 사용하여 큐 범위를 지정할 수 있습니다. 자세한 내용은 4.2절. “주소 집합에 주소 설정 적용”의 내용을 참조하십시오. redistribution-delay-
브로커가 클러스터의 다른 브로커에 메시지를 재배포하기 전에 이 큐의 최종 소비자가 종료한 후 대기해야 하는 시간(밀리초)입니다. 이 값을
0으로 설정하면 메시지가 즉시 재배포됩니다. 그러나 일반적으로 redistributing 전에 지연을 설정해야 합니다. 소비자가 종료되지만 다른 하나는 동일한 큐에서 신속하게 생성되는 것이 일반적입니다.
- 클러스터의 추가 브로커 각각에 대해 이 절차를 반복합니다.
추가 리소스
-
메시지를 재배포하는 브로커 클러스터 구성의 예는
queue-message-redistributionAMQ Broker 예제 프로그램을 참조하십시오.