4.22.8. 업스트림 대기열 통합 구성
다음 예는 독립 실행형 브로커에 대해 업스트림 대기열 페더레이션을 구성하는 방법을 보여줍니다. 이 예제에서는 로컬 (즉, 다운스트림 ) 브로커에서 일부 원격 (즉, 업스트림) 브로커에 대한 페더레이션을 구성합니다.
사전 요구 사항
- 다음 예제에서는 독립 실행형 브로커 간에 큐 페더레이션을 구성하는 방법을 보여줍니다. 그러나 브로커 클러스터에 대한 페더레이션 구성 요구 사항도 잘 알고 있어야 합니다. 자세한 내용은 4.22.4절. “브로커 클러스터에 대한 페더레이션 구성”의 내용을 참조하십시오.
절차
-
<
broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. 새로운 <
federations
> 요소 내에서 <federation> 요소를
추가합니다. 예를 들면 다음과 같습니다.<federations> <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> </federation> </federations>
name
- 페더레이션 구성의 이름입니다. 이 예에서 name은 downstream 브로커의 이름에 해당합니다.
user
- 업스트림 브로커에 연결하기 위한 공유 사용자 이름입니다.
암호
- 업스트림 브로커와의 연결에 대한 공유 암호입니다.
참고- 업스트림 브로커에 대해 사용자 및 암호 인증 정보가 다른 경우 구성에 추가할 때 해당 브로커의 인증 정보를 별도로 지정할 수 있습니다. 이 내용은 이 절차의 뒷부분에서 설명합니다.
페더레이션 요소 내에서
<
;queue-policy>
; 요소를 추가합니다. <queue-policy>
요소의 속성에 대한 값을 지정합니다. 예를 들면 다음과 같습니다.<federations> <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <queue-policy name="news-queue-federation" include-federated="true" priority-adjustment="-5" transformer-ref="news-transformer"> </queue-policy> </federation> </federations>
name
- 큐 정책의 이름입니다. 브로커에 구성된 모든 큐 정책에는 고유한 이름이 있어야 합니다.
include-federated
이 속성의 값이
false
로 설정되면 구성이 이미 제공된 소비자(즉, 페더레이션 대기열의 소비자)를 다시 변형시키지 않습니다. 이를 통해 대칭 또는 폐쇄 루프 토폴로지의 경우 작동하지 않는 소비자가 없으며 메시지는 시스템 전체에서 무한대로 흐르는 상황을 방지할 수 있습니다.닫기 루프 토폴로지가 없는 경우 이 속성의 값을
true
로 설정할 수 있습니다.You might set the value of this property to true if you do not have a closed-loop topology. 예를 들어BrokerA
및BrokerC
의 생산자가 있는 3개의 브로커,BrokerA
,BrokerB
및BrokerC
체인이 있다고 가정합니다. 이 경우BrokerB
에서 소비자를BrokerA
에 다시 제공하려고 합니다.priority-adjustment
-
소비자가 큐에 연결할 때 해당 우선 순위는 업스트림 소비자(즉, 페더레이션) 소비자가 생성될 때 사용됩니다. 연합 소비자의 우선 순위는
우선 순위 속성의 값에 의해 조정
됩니다. 이 속성의 기본값은-1
이며, 이는 부하 분산 중에 로컬 소비자가 페더레이션 소비자보다 우선 순위를 지정할 수 있습니다. 그러나 필요에 따라 우선순위 조정의 값을 변경할 수 있습니다. transformer-ref
- 변환기 구성의 이름입니다. 연합 메시지 전송 중에 메시지를 변환하려면 변환기 구성을 추가할 수 있습니다. Transformer 구성은 이 절차의 뒷부분에서 설명합니다.
<
queue-policy
> 요소 내에서 큐 정책에서 주소를 포함 및 제외하는 address-matching 패턴을 추가합니다. 예를 들면 다음과 같습니다.<federations> <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <queue-policy name="news-queue-federation" include-federated="true" priority-adjustment="-5" transformer-ref="news-transformer"> <include queue-match="#" address-match="queue.bbc.new" /> <include queue-match="#" address-match="queue.usatoday" /> <include queue-match="#" address-match="queue.news.#" /> <exclude queue-match="#.local" address-match="#" /> </queue-policy> </federation> </federations>
include
이 요소의
address-match
속성 값은 큐 정책에 포함할 주소를 지정합니다. 정확한 주소(예:queue.bbc.new
또는queue.usatoday
)를 지정할 수 있습니다. 또는 와일드카드 식을 사용하여 일치하는 주소 집합 을 지정할 수 있습니다. 이전 예에서 큐 정책에는 문자열queue.news
로 시작하는 모든 주소 이름도 포함되어 있습니다.address-match
속성과 함께queue-match
속성을 사용하여 큐 정책의 해당 주소에 특정 큐를 포함할 수 있습니다.address-match
속성과 마찬가지로 정확한 대기열 이름을 지정하거나 와일드카드 표현식을 사용하여 큐 세트 를 지정할 수 있습니다. 앞의 예제에서 숫자 기호(#
) 와일드카드 문자는 각 주소 또는 주소 세트의 모든 큐가 큐 정책에 포함됨을 의미합니다.exclude
-
이 요소의
address-match
속성 값은 큐 정책에서 제외할 주소를 지정합니다. 정확한 주소를 지정하거나 와일드카드 식을 사용하여 일치하는 주소 집합 을 지정할 수 있습니다. 앞의 예제에서 숫자 기호(#
) 와일드카드 문자는 모든 주소에서queue-match
속성과 일치하는 모든 큐가 제외됨을 의미합니다. 이 경우.local
문자열로 끝나는 모든 큐는 제외됩니다. 이는 특정 대기열이 로컬 대기열로 유지되며 통합되지 않음을 나타냅니다.
페더레이션 요소 내에서
사용자
지정변환기
구현을 참조하기 위해 변환기 요소를 추가합니다. 예를 들면 다음과 같습니다.<federations> <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <queue-policy name="news-queue-federation" include-federated="true" priority-adjustment="-5" transformer-ref="news-transformer"> <include queue-match="#" address-match="queue.bbc.new" /> <include queue-match="#" address-match="queue.usatoday" /> <include queue-match="#" address-match="queue.news.#" /> <exclude queue-match="#.local" address-match="#" /> </queue-policy> <transformer name="news-transformer"> <class-name>org.foo.NewsTransformer</class-name> <property key="key1" value="value1"/> <property key="key2" value="value2"/> </transformer> </federation> </federations>
name
-
변환기 구성의 이름입니다. 이 이름은 해당 브로커에서 고유해야 합니다. 이 이름을 주소 정책의
transformer-ref
속성에 대한 값으로 지정합니다. class-name
org.apache.activemq.artemis.core.server.transformer.Transformer
인터페이스를 구현하는 사용자 정의 클래스의 이름입니다.transformer의
transform()
메서드는 메시지를 전송하기 전에 메시지와 함께 호출됩니다. 이를 통해 메시지 헤더 또는 본문이 통합되기 전에 변환할 수 있습니다.속성
- 특정 변환기 구성에 대해 키-값 쌍을 유지하는 데 사용됩니다.
페더레이션 요소
내에서 하나
이상의업스트림
요소를 추가합니다. 각업스트림
요소는 해당 연결에 적용할 업스트림 브로커 연결 및 정책을 정의합니다. 예를 들면 다음과 같습니다.<federations> <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <upstream name="eu-east-1"> <static-connectors> <connector-ref>eu-east-connector1</connector-ref> </static-connectors> <policy ref="news-queue-federation"/> </upstream> <upstream name="eu-west-1" > <static-connectors> <connector-ref>eu-west-connector1</connector-ref> </static-connectors> <policy ref="news-queue-federation"/> </upstream> <queue-policy name="news-queue-federation" include-federated="true" priority-adjustment="-5" transformer-ref="news-transformer"> <include queue-match="#" address-match="queue.bbc.new" /> <include queue-match="#" address-match="queue.usatoday" /> <include queue-match="#" address-match="queue.news.#" /> <exclude queue-match="#.local" address-match="#" /> </queue-policy> <transformer name="news-transformer"> <class-name>org.foo.NewsTransformer</class-name> <property key="key1" value="value1"/> <property key="key2" value="value2"/> </transformer> </federation> </federations>
static-connectors
-
로컬 브로커의
broker.xml
구성 파일에서 정의된 커넥터 요소를 참조하는connector
-ref정적 연결 요소에서 참조한 커넥터
를 추가하는 방법을 보여줍니다. policy-ref
- 업스트림 브로커에 적용되는 다운스트림 브로커에 구성된 큐 정책의 이름입니다.
업스트림
요소에 대해 지정할 수 있는 추가 옵션은 아래에 설명되어 있습니다.name
-
업스트림 브로커 구성의 이름입니다. 이 예에서 이름은
eu-east-1
및eu-west-1
이라는 업스트림 브로커에 해당합니다. user
-
업스트림 브로커에 대한 연결을 생성할 때 사용할 사용자 이름입니다. 지정하지 않으면 페더레이션 요소의 구성에 지정된 공유 사용자 이름이 사용됩니다.
암호
-
업스트림 브로커에 대한 연결을 생성할 때 사용할 암호입니다. 지정하지 않으면 페더레이션 요소의 구성에 지정된 공유 암호가 사용됩니다.
call-failover-timeout
-
call-timeout
과 유사하지만 장애 조치(failover) 시도 중에 호출이 수행됩니다. 기본값은-1
이며, 이는 시간 초과가 비활성화됨을 의미합니다. call-timeout
-
페더레이션 연결은 차단 호출인 패킷을 전송할 때 원격 브로커의 응답을 대기하는 시간(밀리초)입니다. 이 시간이 경과하면 연결에서 예외가 발생합니다. 기본값은
30000
입니다. check-period
-
로컬 브로커가 원격 브로커로 보내는 연속 "보통" 메시지 사이의 기간(밀리초)은 페더레이션 연결의 상태를 확인합니다. 페더레이션 연결이 정상이면 원격 브로커는 각 keep-alive 메시지에 응답합니다. 연결이 비정상인 경우 다운스트림 브로커가 업스트림 브로커에서 응답을 수신하지 못하면 회로 차단기 라는 메커니즘을 사용하여 페더레이션 소비자를 차단합니다. 자세한 내용은
circuit-breaker-timeout
매개변수에 대한 설명을 참조하십시오.check-period
매개변수의 기본값은30000
입니다. circuit-breaker-timeout
- 다운스트림과 업스트림 브로커 간의 단일 연결은 많은 연합 큐와 주소 소비자에 의해 공유될 수 있습니다. 브로커 간의 연결이 손실되는 경우 각 연합 소비자는 동시에 다시 연결을 시도할 수 있습니다. 이를 방지하기 위해 회로 차단기 라는 메커니즘은 소비자를 차단합니다. 지정된 시간 초과 값이 경과하면 회로 차단기가 연결을 다시 만듭니다. 성공하면 소비자는 차단 해제됩니다. 그렇지 않으면 회로 차단기가 다시 적용됩니다.
connection-ttl
-
원격 브로커에서 메시지 수신을 중지하면 페더레이션 연결이 활성 상태로 유지됩니다. 기본값은
60000
입니다. discovery-group-ref
-
업스트림 브로커에 대한 연결에 대한 정적 커넥터를 정의하는 대신 이 요소를 사용하여
broker.xml
구성 파일의 다른 곳에서 이미 구성된 검색 그룹을 지정할 수 있습니다. 특히 이 요소의discovery-group-name
속성에 대한 값으로 기존 검색 그룹을 지정합니다. 검색 그룹에 대한 자세한 내용은 14.1.5절. “브로커 검색 방법” 을 참조하십시오. ha
-
업스트림 브로커 연결에 대해 고가용성을 활성화할지 여부를 지정합니다. 이 매개변수의 값이
true
로 설정된 경우 로컬 브로커는 업스트림 클러스터에서 사용 가능한 모든 브로커에 연결할 수 있으며 라이브 업스트림 브로커가 종료되면 백업 브로커로 자동으로 실패합니다. 기본값은false
입니다. initial-connect-attempts
-
다운스트림 브로커가 업스트림 브로커에 연결하려고 하는 초기 시도 수입니다. 연결이 설정되지 않은 경우 업스트림 브로커는 영구적으로 오프라인 상태로 간주됩니다. 다운스트림 브로커는 더 이상 메시지를 업스트림 브로커로 라우팅하지 않습니다. 기본값은
-1
이며 이는 제한이 없음을 의미합니다. max-retry-interval
-
원격 브로커에 연결할 때 후속 재시도 시도 사이의 최대 시간(밀리초)입니다. 기본값은
2000
입니다. reconnect-attempts
-
다운스트림 브로커가 연결에 실패한 경우 업스트림 브로커에 다시 연결을 시도하는 횟수입니다. 연결을 재설정하지 않고 이 값에 도달하면 업스트림 브로커는 영구적으로 오프라인 상태로 간주됩니다. 다운스트림 브로커는 더 이상 메시지를 업스트림 브로커로 라우팅하지 않습니다. 기본값은
-1
이며 이는 제한이 없음을 의미합니다. retry-interval
-
원격 브로커에 대한 연결이 실패한 경우 후속 재시도 시도 사이의 기간(밀리초)입니다. 기본값은
500
입니다. retry-interval-multiplier
-
retry-interval
매개 변수의 값에 적용되는 요인을 곱합니다. 기본값은1
입니다. share-connection
-
동일한 브로커에 대해 다운스트림 및 업스트림 연결이 모두 구성된 경우 다운스트림 및 업스트림 구성 모두 이 매개 변수의 값을
true
로 설정하는 경우 동일한 연결이 공유됩니다. 기본값은false
입니다.
로컬 브로커에서 원격 브로커에 커넥터를 추가합니다. 이는 연합 주소 구성의
정적 연결 요소에서 참조되는 커넥터
입니다. 예를 들면 다음과 같습니다.<connectors> <connector name="eu-west-1-connector">tcp://localhost:61616</connector> <connector name="eu-east-1-connector">tcp://localhost:61617</connector> </connectors>