4.22. 주소 및 큐 처리
페더레이션을 사용하면 브로커가 공통 클러스터에 있을 필요 없이 브로커 간 메시지를 전송할 수 있습니다. 브로커는 독립 실행형 또는 별도의 클러스터에 있을 수 있습니다. 또한 소스 및 대상 브로커는 서로 다른 관리 도메인에 있을 수 있습니다. 즉, 브로커의 구성, 사용자 및 보안 설정이 다를 수 있습니다. 브로커가 다른 버전의 AMQ Broker를 사용하고 있을 수도 있습니다.
예를 들어, 페더레이션은 한 클러스터에서 다른 클러스터로 안정적으로 메시지를 보내는 데 적합합니다. 이러한 전송은 클라우드 인프라의 영역 또는 인터넷을 통해 전송될 수 있습니다. 소스 브로커에서 대상 브로커로의 연결이 끊어지면(예: 네트워크 장애로 인해) 소스 브로커는 대상 브로커가 다시 온라인 상태가 될 때까지 연결을 다시 설정하려고 합니다. 대상 브로커가 다시 온라인 상태가 되면 메시지 전송이 재개됩니다.
관리자는 주소 및 큐 정책을 사용하여 페더레이션을 관리할 수 있습니다. 정책 구성은 특정 주소 또는 큐와 일치하거나, 구성과 일치하는 와일드카드 표현식을 주소 또는 큐 집합과 일치시킬 수 있습니다. 따라서 일치하는 세트에서 큐 또는 주소가 추가되거나 제거될 때 페더레이션을 동적으로 적용할 수 있습니다. 정책에는 특정 주소 및 큐를 포함 및/또는 제외하는 여러 표현식이 포함될 수 있습니다. 또한 브로커 또는 브로커 클러스터에 여러 정책을 적용할 수 있습니다.
AMQ Broker에서 두 가지 주요 페더레이션 옵션은 주소 페더레이션 및 큐 페더레이션 입니다. 이러한 옵션은 다음 섹션에 설명되어 있습니다.
브로커는 페더레이션 및 로컬 전용 구성 요소에 대한 구성을 포함할 수 있습니다. 즉, 브로커에 페더레이션을 구성하면 브로커에 모든 것을 통합 할 필요가 없습니다.
4.22.1. 주소 페더레이션 정보
주소 페더레이션은 연결된 브로커 간의 전체 멀티 캐스트 배포 패턴과 같습니다. 예를 들어 BrokerA
의 주소로 전송되는 모든 메시지는 해당 브로커의 모든 큐로 전달됩니다. 또한 각 메시지는 BrokerB
로 전달되고 연결된 모든 대기열도 제공됩니다.
주소 페더레이션은 브로커를 원격 브로커의 주소에 동적으로 연결합니다. 예를 들어 로컬 브로커가 원격 브로커의 주소에서 메시지를 가져오려는 경우 원격 주소에 큐가 자동으로 생성됩니다. 그런 다음 원격 브로커의 메시지가 이 큐에 사용됩니다. 마지막으로 메시지는 원래 로컬 주소에 직접 게시된 것처럼 로컬 브로커의 해당 주소로 복사됩니다.
원격 브로커는 페더레이션이 주소를 만들 수 있도록 재구성할 필요가 없습니다. 그러나 로컬 브로커에 는 원격 주소에 대한 권한이 부여되어야 합니다.
4.22.2. 주소 페더레이션을 위한 공통 토폴로지
주소 페더레이션 사용을 위한 몇 가지 일반적인 토폴로지는 아래에 설명되어 있습니다.
- 대칭 토폴로지
대칭 토폴로지에서 생산자 및 소비자는 각 브로커에 연결됩니다. 큐와 소비자는 생산자가 게시한 메시지를 수신할 수 있습니다. 대칭 토폴로지의 예는 다음과 같습니다.
그림 4.5. 대칭 토폴로지의 주소 페더레이션
대칭 토폴로지에 대한 주소 페더레이션을 구성할 때 주소 정책의
max-hops
속성 값을1
로 설정하는 것이 중요합니다. 이렇게 하면 메시지가 한 번만 복사되므로 주기적인 복제를 방지할 수 있습니다. 이 속성이 더 큰 값으로 설정된 경우 소비자는 동일한 메시지의 여러 복사본을 수신합니다.- 전체 메시 토폴로지
전체 메시 토폴로지는 대칭 설정과 유사합니다. 세 개 이상의 브로커가 서로 대칭화되어 전체 메시를 생성합니다. 이 설정에서 생산자 및 소비자는 각 브로커에 연결됩니다. 큐와 소비자는 모든 생산자가 게시한 메시지를 수신할 수 있습니다. 이 토폴로지의 예는 다음과 같습니다.
그림 4.6. 전체 메시 토폴로지의 주소 페더레이션
대칭 설정과 마찬가지로 전체 메시 토폴로지에 대한 주소 페더레이션을 구성할 때 주소 정책의
max-hops
속성 값을1
로 설정하는 것이 중요합니다. 이렇게 하면 메시지가 한 번만 복사되므로 주기적인 복제를 방지할 수 있습니다.- 링 토폴로지
브로커의 링에서 각 페더레이션 주소는 링에서 서로만 업스트림됩니다. 이 토폴로지의 예는 다음과 같습니다.
그림 4.7. 링 토폴로지의 주소 페더레이션
순환 복제를 피하기 위해 링 토폴로지에 대한 페더레이션을 구성할 때 주소 정책의
max-hops
속성을n-1
값으로 설정하는 것이 중요합니다. 여기서 n 은 링의 노드 수입니다. 예를 들어 위에 표시된 링 토폴로지에서max-hops
값은5
로 설정됩니다. 이렇게 하면 링의 모든 주소가 정확히 한 번 메시지를 볼 수 있습니다.링 토폴로지의 장점은 설정해야 하는 물리적 연결 수 측면에서 설정하는 것이 저렴하다는 점입니다. 그러나 이러한 유형의 토폴로지의 단점은 단일 브로커가 실패하면 전체 링이 실패한다는 것입니다.
- 팬 아웃 토폴로지
팬 아웃 토폴로지에서 단일 마스터 주소는 페더레이션 주소 트리에 의해 연결됩니다. 마스터 주소에 게시된 모든 메시지는 트리의 브로커에 연결된 모든 소비자가 수신할 수 있습니다. 트리는 임의의 깊이로 구성할 수 있습니다. 트리에서 기존 브로커를 재구성할 필요 없이 트리를 확장할 수도 있습니다. 이 토폴로지의 예는 다음과 같습니다.
그림 4.8. 팬 아웃 토폴로지의 주소 페더레이션
팬 아웃 토폴로지에 대한 페더레이션을 구성할 때 주소 정책의
max-hops
속성을n-1
값으로 설정해야 합니다. 여기서 n 은 트리의 수준 수입니다. 예를 들어 위에 표시된 팬 아웃 토폴로지에서max-hops
값은2
로 설정됩니다. 이렇게 하면 트리의 모든 주소가 정확히 한 번 메시지를 볼 수 있습니다.
4.22.3. 주소 페더레이션 구성에서 다양한 바인딩 지원
주소 페더레이션을 구성할 때 주소 정책 구성에서 다양한 바인딩에 대한 지원을 추가할 수 있습니다. 이러한 지원을 추가하면 페더레이션이 다양한 바인딩에 응답하여 원격 브로커에서 지정된 주소에 대한 페더레이션 소비자를 만들 수 있습니다.
예를 들어 test.federation.source
라는 주소가 주소 정책에 포함되어 있고 test.federation.target
이라는 다른 주소가 포함되어 있지 않다고 가정합니다. 일반적으로, test.federation.target
에서 큐가 생성 되면 주소가 주소 정책의 일부가 아니기 때문에 페더레이션 소비자가 생성되지 않습니다. 그러나 test.federation.source
가 소스 주소이고 test.federation.target
이 전달 주소가 되도록 다양한 바인딩을 생성하는 경우 전달 주소에 지속성 소비자가 생성됩니다. 소스 주소는 여전히 멀티 캐스트
라우팅 유형을 사용해야 하지만 대상 주소는 멀티 캐스트
또는 anycast
를 사용할 수 있습니다.
예제 사용 사례는 JMS 주제(멀티 캐스트
주소)를 JMS 큐(anycast
주소)로 리디렉션하는 다양한 방법입니다. 이를 통해 레거시 소비자가 JMS 2.0 및 공유 서브스크립션을 지원하지 않는 항목에 대한 메시지의 부하 분산이 가능합니다.
4.22.4. 페더레이션 구성
Core 프로토콜 또는 7.12, AMQP를 사용하여 주소 및 큐 페더레이션을 구성할 수 있습니다. AMQP를 사용하여 페더레이션을 사용하면 다음과 같은 이점이 있습니다.
- 클라이언트가 AMQP를 메시징에 사용하는 경우 AMQP를 사용하여 AMQP와 Core 프로토콜 간에 메시지를 변환할 필요가 없으며 그 반대의 경우도 마찬가지입니다. 이는 페더레이션 프로토콜을 사용하는 경우 필요합니다.
- AMQP 페더레이션은 단일 발신 연결을 통해 양방향 페더레이션을 지원합니다. 이를 통해 원격 브로커가 로컬 브로커에 다시 연결할 필요가 없습니다.이 브로커는 페더레이션의 Core 프로토콜을 사용하고 네트워크 정책에 의해 방지 될 수있는 요구 사항입니다.
4.22.4.1. AMQP를 사용하여 페더레이션 구성
다음 정책을 사용하여 AMQP를 사용하여 주소 및 큐 페더레이션을 구성할 수 있습니다.
- 로컬 주소 정책은 로컬 브로커가 주소에서 수요를 감시하도록 구성하고, 해당 요청이 있는 경우 로컬 브로커에 메시지를 유도하기 위해 원격 브로커의 일치하는 주소에 페더레이션 소비자를 만듭니다.
- 원격 주소 정책은 원격 브로커가 주소에서 수요를 감시하도록 구성하고, 해당 요청이 있는 경우 로컬 브로커의 일치하는 주소에 페더레이션 소비자를 생성하여 원격 브로커에 메시지를 유도합니다.
- 로컬 큐 정책은 로컬 브로커가 대기열에 대한 수요를 감시하도록 구성하고, 해당 요청이 있는 경우 원격 브로커의 일치하는 큐에 페더레이션 소비자를 생성하여 로컬 브로커에 메시지를 전송합니다.
- 원격 대기열 정책은 원격 브로커가 대기열에서 수요를 감시하도록 구성하고, 해당 요청이 있는 경우 로컬 브로커의 일치하는 큐에 페더레이션 소비자를 생성하여 원격 브로커에 메시지를 전송합니다.
원격 주소 및 큐 정책은 원격 브로커로 전송되고 역방향 페더레이션 연결을 제공하기 위해 원격 브로커의 로컬 정책이 됩니다. 역방향 페더레이션 연결에 대한 정책을 적용할 때 정책을 수신한 브로커는 로컬 브로커이고 정책을 보낸 브로커는 원격 브로커입니다. 로컬 브로커에 원격 주소 및 큐 정책을 구성하면 모든 페더레이션 구성을 단일 브로커에 유지할 수 있습니다. 예를 들어 hub-and-spoke 토폴로지에 유용한 접근 방식이 될 수 있습니다.
4.22.4.1.1. AMQP를 사용하여 주소 페더레이션 구성
< broker-connections>
요소를 사용하여 AMQP를 사용하여 주소 페더레이션을 구성합니다.
사전 요구 사항
< amqp-connection
> 요소에 지정된 사용자에게는 원격 브로커의 주소와 큐와 일치하는 읽기 및 쓰기 권한이 있습니다.
프로세스
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. <
amqp-connection> 요소를 포함하는 <broker connections
>;amqp-connection
> 요소에서 원격 브로커의 연결 세부 정보를 지정하고 페더레이션 구성에 이름을 할당합니다. 예를 들면 다음과 같습니다.<broker-connections> <amqp-connection uri="tcp://<__HOST__>:<__PORT__>" user="federation_user" password="federation_pwd" name="queue-federation-example"> </amqp-connection> </broker-connections>
<
;federation>
; 요소를 추가하고 다음 중 하나 또는 둘 다를 포함합니다.-
원격 브로커에서
로컬 브로커로 메시지를 통합하는 <local-address-policy
> 요소입니다. -
로컬 브로커에서
원격 브로커로 메시지를 통합하는 <remote-address-policy
> 요소입니다.
다음 예제에서는 로컬 및 원격 주소 정책이 모두 있는 페더레이션 요소를 보여줍니다.
<broker-connections> <amqp-connection uri="tcp://<__HOST__>:<__PORT__>" user="federation_user" password="federation_pwd" name="queue-federation-example"> <federation> <local-address-policy name="example-local-address-policy" auto-delete="true" auto-delete-delay="1" auto-delete-message-count="2" max-hops="1" enable-divert-bindings="true"> <include address-match="queue.news.#" /> <include address-match="queue.bbc.news" /> <exclude address-match="queue.news.sport.#" /> </local-address-policy> <remote-address-policy name="example-remote-address-policy"> <include address-match="queue.usatoday" /> </remote-address-policy> </federation> </amqp-connection> </broker-connections>
동일한 매개변수는 로컬 및 원격 주소 정책 모두에서 구성할 수 있습니다. 유효한 매개변수는 다음과 같습니다.
- name
-
주소 정책의 이름입니다. 모든 주소 정책 이름은 <
broker-connections
> 요소의 <federation
> 요소 내에서 고유해야 합니다. - max-hops
-
페더레이션 중에 메시지가 만들 수 있는 최대 홉 수입니다. 기본값은
대부분의
간단한 페더레이션 배포에 적합합니다. 그러나 특정 토폴로지에서는 메시지가 루프되지 않도록 하는 데 더 큰 값이 필요할 수 있습니다. - 자동 삭제
-
주소 페더레이션의 경우 메시지가 페인딩되는 브로커에 생성됩니다. 시작 브로커의 연결이 끊어지고 지연 및 메시지 수 매개변수가 충족되면 자동 삭제 대기열을 표시하려면 이 매개변수를 true로 설정합니다. 동적으로 생성된 큐의 정리를 자동화하려는 경우 이 옵션이 유용합니다. 기본값은
false
이므로 큐가 자동으로 삭제되지 않습니다. - auto-delete-delay
-
브로커 시작 연결이 끊어진 후 생성된 큐를 자동으로 삭제할 수 있는 시간(밀리초)입니다. 기본값은
0
입니다. - auto-delete-message-count
-
큐의 메시지 수가 큐를 자동으로 삭제하기 전에 큐보다 작거나 같아야 합니다. 기본값은
0
입니다. - enable-divert-bindings
-
true
로 설정하면 필요에 따라 다양한 바인딩을 청취할 수 있습니다. 주소가 있는 다양한 바인딩이 주소 정책에 대한 포함된 주소와 일치하는 경우 다이버트의 전달 주소와 일치하는 모든 큐 바인딩이 수요를 생성합니다. 기본값은false
입니다. - 포함
정책에 포함할 주소와 일치하는 주소와 일치하는 패턴입니다. 여러 패턴을 지정할 수 있습니다. 패턴을 지정하지 않으면 모든 주소가 정책에 포함됩니다.
정확한 주소를 지정할 수 있습니다(예:
queue.bbc.news
). 또는 숫자 기호(#) 와일드카드 문자를 사용하여 일치하는 주소 집합을 지정할 수 있습니다. 이전 예에서 로컬 주소 정책에는queue.news
문자열로 시작하는 모든 주소도 포함됩니다.- exclude
정책에서 제외할 주소와 일치하는 주소와 일치하는 패턴입니다. 여러 패턴을 지정할 수 있습니다. 패턴을 지정하지 않으면 주소가 정책에서 제외되지 않습니다.
정확한 주소를 지정할 수 있습니다(예:
queue.bbc.news
). 또는 숫자 기호(#) 와일드카드 문자를 사용하여 일치하는 주소 집합을 지정할 수 있습니다. 이전 예에서 로컬 주소 정책은queue.news.sport
문자열로 시작하는 모든 주소를 제외합니다.
-
원격 브로커에서
4.22.4.1.2. AMQP를 사용하여 대기열 페더레이션 구성
프로세스
< broker connections>
요소를 사용하여 AMQP의 대기열 페더레이션을 구성합니다.
사전 요구 사항
< amqp-connection
> 요소에 지정된 사용자에게는 원격 브로커의 주소와 큐와 일치하는 읽기 및 쓰기 권한이 있습니다.
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. <
amqp-connection> 요소를 포함하는 <broker connections
>;amqp-connection
> 요소에서 원격 브로커의 연결 세부 정보를 지정하고 페더레이션 구성에 이름을 할당합니다. 예를 들면 다음과 같습니다.<broker-connections> <amqp-connection uri="tcp://<__HOST__>:<__PORT__>" user="federation_user" password="federation_pwd" name="queue-federation-example"> </amqp-connection> </broker-connections>
<
;federation>
; 요소를 추가하고 다음 중 하나 또는 둘 다를 포함합니다.-
원격 브로커에서
로컬 브로커로 메시지를 통합하는 <local-queue-policy
> 요소입니다. -
로컬 브로커에서
원격 브로커로 메시지를 통합하는 <remote-queue-policy
> 요소입니다.
다음 예제에서는 로컬 큐 정책을 포함하는 페더레이션 요소를 보여줍니다.
<broker-connections> <amqp-connection uri="tcp://HOST:PORT" name="federation-example"> <federation> <local-queue-policy name="example-local-queue-policy"> <include address-match="#" queue-match="#.remote" /> <exclude address-match="#" queue-match="#.local" /> </local-queue-policy> </federation> </amqp-connection> </broker-connections>
- name
-
큐 정책의 이름입니다. 모든 큐 정책 이름은 <
broker-connections
> 요소의 <federation
> 요소 내에서 고유해야 합니다. - 포함
-
정책에 포함되기 위해
해당
주소의 특정큐와 일치하는 주소 일치
패턴 및 큐 일치 패턴입니다.address-match
매개변수와 마찬가지로queue-match
매개변수에 대한 정확한 이름을 지정하거나 와일드카드 표현식을 사용하여 대기열 세트를 지정할 수 있습니다. 위 예제에서는 주소 일치 값#
임을 나타내는 모든 주소의.remote
문자열과일치하는
큐가 포함됩니다. - exclude
-
정책을 제외하기 위해
해당
주소의 특정 큐와 일치하는 주소일치
패턴 및 큐 일치 패턴입니다.address-match
매개변수와 마찬가지로queue-match
매개변수에 대한 정확한 이름을 지정하거나 와일드카드 표현식을 사용하여 대기열 세트를 지정할 수 있습니다. 이전 예에서 주소 일치 값#
로 표시되는 모든 주소의.local
문자열과일치하는
큐는 제외됩니다. - priority-adjustment
-
통합 소비자의 값을 조정하여 동일한 큐에 있는 다른 로컬 소비자보다 우선 순위가 낮은지 확인합니다. 기본값은
-1
로, 로컬 소비자가 페더레이션 소비자보다 우선 순위를 지정하도록 합니다. - include-federated
이 매개 변수의 값이
false
로 설정되면 구성이 이미 제공된 소비자(즉, 페더레이션 대기열의 소비자)를 다시 제공하지 않습니다. 이렇게 하면 대칭 또는 폐쇄 루프 토폴로지에서 제공되지 않는 소비자와 메시지가 시스템 전체에서 끝없이 흐름되는 상황을 방지할 수 있습니다.closed-loop 토폴로지가 없는 경우 이 매개변수의 값을
true
로 설정할 수 있습니다. 예를 들어 BrokerA, BrokerB 및 BrokerC의 세 가지 브로커 체인과 BrokerA의 생산자와 BrokerC의 소비자가 있다고 가정합니다. 이 경우 BrokerB가 소비자를 BrokerA에 다시 공급하도록 합니다.
-
원격 브로커에서
4.22.4.2. Core 프로토콜을 사용하여 페더레이션 구성
Core 프로토콜을 사용하도록 메시지 및 큐 페더레이션을 구성할 수 있습니다.
4.22.4.2.1. 브로커 클러스터에 대한 페더레이션 구성
다음 섹션의 예제에서는 독립 실행형 로컬 브로커와 원격 브로커 간에 주소 및 큐 페더레이션을 구성하는 방법을 보여줍니다. 독립 실행형 브로커 간 페더레이션의 경우 페더레이션 구성의 이름과 모든 주소 및 큐 정책의 이름은 로컬 브로커와 원격 브로커 간에 고유해야 합니다.
그러나 클러스터에서 브로커에 대한 페더레이션을 구성하는 경우 추가 요구 사항이 있습니다. 클러스터형 브로커의 경우 페더레이션 구성의 이름과 해당 구성 내의 모든 주소 및 큐 정책 이름은 해당 클러스터 의 모든 브로커에 대해 동일해야 합니다.
동일한 클러스터의 브로커가 동일한 페더레이션 구성 및 주소 및 큐 정책 이름을 사용하도록 하면 메시지 중복이 발생하지 않습니다. 예를 들어, 동일한 클러스터 내의 브로커가 서로 다른 페더레이션 구성 이름을 갖는 경우, 이로 인해 동일한 주소에 대해 여러 다른 이름 전달 대기열이 생성되어 다운스트림 소비자에 대한 메시지 복제가 발생할 수 있습니다. 반대로, 동일한 클러스터의 브로커가 동일한 페더레이션 구성 이름을 사용하는 경우 기본적으로 다운스트림 소비자에 부하 분산되는 복제, 클러스터형 전달 대기열을 생성합니다. 이렇게 하면 메시지 중복을 방지할 수 있습니다.
4.22.4.2.2. 업스트림 주소 페더레이션 구성
다음 예제에서는 독립 실행형 브로커 간에 업스트림 주소 페더레이션을 구성하는 방법을 보여줍니다. 이 예에서는 로컬(즉, 다운스트림) 브로커에서 일부 원격(즉, 업스트림) 브로커로 페더레이션을 구성합니다.
사전 요구 사항
- 다음 예제에서는 독립 실행형 브로커 간에 주소 페더레이션을 구성하는 방법을 보여줍니다. 그러나 브로커 클러스터에 대한 페더레이션 구성을 위한 요구 사항도 숙지해야 합니다. 자세한 내용은 4.22.4.2.1절. “브로커 클러스터에 대한 페더레이션 구성”의 내용을 참조하십시오.
프로세스
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. <
federation> 요소를 포함하는 새로운 <
요소를 추가합니다. 예를 들면 다음과 같습니다.federations
><federations> <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> </federation> </federations>
name
- 페더레이션 구성의 이름입니다. 이 예에서 이름은 로컬 브로커의 이름에 해당합니다.
user
- 업스트림 브로커에 연결하기 위한 공유 사용자 이름입니다.
암호
- 업스트림 브로커에 연결하기 위한 공유 암호입니다.
참고원격 브로커의 경우 사용자 및 암호 인증 정보가 다른 경우 구성에 추가할 때 해당 브로커의 인증 정보를 별도로 지정할 수 있습니다. 이 내용은 이 절차의 뒷부분에서 설명합니다.
페더레이션
요소 내에서 <address-policy> 요소를
추가합니다. 예를 들면 다음과 같습니다.<federations> <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <address-policy name="news-address-federation" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" enable-divert-bindings="false" max-hops="1" transformer-ref="news-transformer"> </address-policy> </federation> </federations>
name
- 주소 정책의 이름입니다. 브로커에 구성된 모든 주소 정책에는 고유한 이름이 있어야 합니다.
자동 삭제
-
주소 페더레이션 중에 로컬 브로커는 원격 주소에서 자선 큐를 동적으로 생성합니다.
auto-delete
속성 값은 로컬 브로커의 연결이 끊어지고auto-delete-delay
및auto-delete-message-count
속성의 값도 도달하면 원격 큐를 삭제해야 하는지 여부를 지정합니다. 동적으로 생성된 큐의 정리를 자동화하려는 경우 이 옵션이 유용합니다. 로컬 브로커가 오랜 시간 동안 연결이 끊어진 경우 원격 브로커에서 메시지를 빌드하지 않으려면 유용한 옵션도 사용할 수 있습니다. 그러나 연결이 끊긴 동안 메시지가 항상 대기 상태로 유지되도록 하려면 로컬 브로커에서 메시지가 손실되지 않도록 하려면 이 옵션을false
로 설정할 수 있습니다. auto-delete-delay
- 로컬 브로커의 연결이 끊어지면 동적으로 생성된 원격 대기열을 자동으로 삭제하기 전에 이 속성의 값을 밀리초 단위로 지정합니다.
auto-delete-message-count
- 로컬 브로커의 연결이 끊어진 후에도 이 속성의 값은 큐를 자동으로 삭제할 수 있기 전에 동적으로 생성된 원격 대기열에 남아 있을 수 있는 최대 메시지 수를 지정합니다.
enable-divert-bindings
-
이 속성을
true
로 설정하면 요구에 따라 다양한 바인딩을 수신할 수 있습니다. 주소 정책에 포함된 주소와 일치하는 주소가 있는 다양한 바인딩이 있는 경우 다이버트의 전달 주소와 일치하는 큐 바인딩이 수요를 생성합니다. 기본값은false
입니다. max-hops
- 페더레이션 중에 메시지가 만들 수 있는 최대 홉 수입니다. 특정 토폴로지에는 이 속성에 대한 특정 값이 필요합니다. 이러한 요구 사항에 대한 자세한 내용은 4.22.2절. “주소 페더레이션을 위한 공통 토폴로지” 을 참조하십시오.
Transformer-ref
- 변환기 구성의 이름입니다. 페더 메시지 전송 중에 메시지를 변환하려면 변환기 구성을 추가할 수 있습니다. Transformer 구성은 이 절차의 뒷부분에서 설명합니다.
<
;address-policy&
gt; 요소 내에서 주소 일치 패턴을 추가하여 주소 정책에서 주소를 포함 및 제외합니다. 예를 들면 다음과 같습니다.<federations> <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <address-policy name="news-address-federation" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" enable-divert-bindings="false" max-hops="1" transformer-ref="news-transformer"> <include address-match="queue.bbc.new" /> <include address-match="queue.usatoday" /> <include address-match="queue.news.#" /> <exclude address-match="queue.news.sport.#" /> </address-policy> </federation> </federations>
포함
-
이 요소의
address-match
속성 값은 주소 정책에 포함할 주소를 지정합니다. 정확한 주소를 지정할 수 있습니다(예:queue.bbc.new
또는queue.usatoday
). 또는 와일드카드 표현식을 사용하여 일치하는 주소 집합 을 지정할 수 있습니다. 이전 예에서 address 정책에는 문자열queue.news
로 시작하는 모든 주소 이름도 포함됩니다. exclude
-
이 요소의
address-match
속성 값은 주소 정책에서 제외할 주소를 지정합니다. 정확한 주소 이름을 지정하거나 와일드카드 표현식을 사용하여 일치하는 주소 집합 을 지정할 수 있습니다. 이전 예에서 주소 정책은 문자열queue.news.sport
로 시작하는 모든 주소 이름을 제외합니다.
(선택 사항)
페더
요소 내에서 사용자 지정변환기
구현을 참조하도록 변환기 요소를 추가합니다. 예를 들면 다음과 같습니다.<federations> <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <address-policy name="news-address-federation" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" enable-divert-bindings="false" max-hops="1" transformer-ref="news-transformer"> <include address-match="queue.bbc.new" /> <include address-match="queue.usatoday" /> <include address-match="queue.news.#" /> <exclude address-match="queue.news.sport.#" /> </address-policy> <transformer name="news-transformer"> <class-name>org.myorg.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-address-federation"/> </upstream> <upstream name="eu-west-1" > <static-connectors> <connector-ref>eu-west-connector1</connector-ref> </static-connectors> <policy ref="news-address-federation"/> </upstream> <address-policy name="news-address-federation" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" enable-divert-bindings="false" max-hops="1" transformer-ref="news-transformer"> <include address-match="queue.bbc.new" /> <include address-match="queue.usatoday" /> <include address-match="queue.news.#" /> <exclude address-match="queue.news.sport.#" /> </address-policy> <transformer name="news-transformer"> <class-name>org.myorg.NewsTransformer</class-name> <property key="key1" value="value1"/> <property key="key2" value="value2"/> </transformer> </federation> </federations>
static-connectors
-
로컬 브로커의
broker.xml
구성 파일의 다른 위치에 정의된 커넥터 요소를 참조하는connector
-refstatic-connectors
요소에서 참조되는 커넥터를 추가하는 방법을 보여줍니다. policy-ref
- 업스트림 브로커에 적용되는 다운스트림 브로커에 구성된 주소 정책의 이름입니다.
업스트림
요소에 지정할 수 있는 추가 옵션은 다음과 같습니다.name
-
업스트림 브로커 구성의 이름입니다. 이 예에서 이름은
eu-east-1
및eu-west-1
이라는 업스트림 브로커에 해당합니다. user
-
업스트림 브로커에 대한 연결을 생성할 때 사용할 사용자 이름입니다. 지정하지 않으면
페더레이션
요소의 구성에 지정된 공유 사용자 이름이 사용됩니다. 암호
-
업스트림 브로커에 대한 연결을 생성할 때 사용할 암호입니다. 지정하지 않으면
federation
요소의 구성에 지정된 공유 암호가 사용됩니다. 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.6절. “브로커 검색 방법” 을 참조하십시오. ha
-
업스트림 브로커 연결에 고가용성이 활성화되어 있는지 여부를 지정합니다. 이 매개변수의 값이
true
로 설정된 경우 로컬 브로커는 업스트림 클러스터에서 사용 가능한 브로커에 연결할 수 있으며 라이브 업스트림 브로커가 종료되면 백업 브로커에 자동으로 실패할 수 있습니다. 기본값은false
입니다. initial-connect-attempts
-
다운스트림 브로커가 업스트림 브로커에 연결하기 위해 생성하는 초기 시도 횟수입니다. 연결을 설정하지 않고 이 값에 도달하면 업스트림 브로커가 영구적으로 오프라인으로 간주됩니다. 다운스트림 브로커는 더 이상 업스트림 브로커로 메시지를 라우팅하지 않습니다. 기본값은
-1
이며 이는 제한이 없음을 의미합니다. max-retry-interval
-
원격 브로커에 연결할 때 후속 재연결 사이의 최대 시간(밀리초)입니다. 기본값은
2000
입니다. 재연결-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>
4.22.4.2.3. 다운스트림 주소 페더레이션 구성
다음 예제에서는 독립 실행형 브로커에 대한 다운스트림 주소 페더레이션을 구성하는 방법을 보여줍니다.
다운스트림 주소 페더레이션을 사용하면 하나 이상의 원격 브로커가 로컬 브로커에 다시 연결하는 데 사용하는 로컬 브로커에 구성을 추가할 수 있습니다. 이 접근 방식의 장점은 모든 페더레이션 구성을 단일 브로커에 유지할 수 있다는 것입니다. 예를 들어 hub-and-spoke 토폴로지에 유용한 접근 방식이 될 수 있습니다.
다운스트림 주소 페더레이션은 페더레이션 연결 방향과 업스트림 주소 구성을 대체합니다. 따라서 구성에 원격 브로커를 추가하면 다운스트림 브로커로 간주됩니다. 다운스트림 브로커는 구성의 연결 정보를 사용하여 이제 업스트림으로 간주되는 로컬 브로커에 다시 연결합니다. 이 문제는 원격 브로커에 대한 구성을 추가할 때 이 예제의 뒷부분에서 설명합니다.
사전 요구 사항
- 업스트림 주소 페더레이션 구성에 대해 잘 알고 있어야 합니다. 4.22.4.2.2절. “업스트림 주소 페더레이션 구성”을 참조하십시오.
- 다음 예제에서는 독립 실행형 브로커 간에 주소 페더레이션을 구성하는 방법을 보여줍니다. 그러나 브로커 클러스터에 대한 페더레이션 구성을 위한 요구 사항도 숙지해야 합니다. 자세한 내용은 4.22.4.2.1절. “브로커 클러스터에 대한 페더레이션 구성”의 내용을 참조하십시오.
프로세스
-
로컬 브로커에서 <
broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. <
federation> 요소를 포함하는 <
요소를 추가합니다. 예를 들면 다음과 같습니다.federations
><federations> <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> </federation> </federations>
주소 정책 구성을 추가합니다. 예를 들면 다음과 같습니다.
<federations> ... <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <address-policy name="news-address-federation" max-hops="1" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" transformer-ref="news-transformer"> <include address-match="queue.bbc.new" /> <include address-match="queue.usatoday" /> <include address-match="queue.news.#" /> <exclude address-match="queue.news.sport.#" /> </address-policy> </federation> ... </federations>
전송 전에 메시지를 변환하려면 변환기 구성을 추가합니다. 예를 들면 다음과 같습니다.
<federations> ... <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <address-policy name="news-address-federation" max-hops="1" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" transformer-ref="news-transformer"> <include address-match="queue.bbc.new" /> <include address-match="queue.usatoday" /> <include address-match="queue.news.#" /> <exclude address-match="queue.news.sport.#" /> </address-policy> <transformer name="news-transformer"> <class-name>org.myorg.NewsTransformer</class-name> <property key="key1" value="value1"/> <property key="key2" value="value2"/> </transformer> </federation> ... </federations>
각 원격 브로커에 대한
다운스트림
요소를 추가합니다. 예를 들면 다음과 같습니다.<federations> ... <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <downstream name="eu-east-1"> <static-connectors> <connector-ref>eu-east-connector1</connector-ref> </static-connectors> <upstream-connector-ref>netty-connector</upstream-connector-ref> <policy ref="news-address-federation"/> </downstream> <downstream name="eu-west-1" > <static-connectors> <connector-ref>eu-west-connector1</connector-ref> </static-connectors> <upstream-connector-ref>netty-connector</upstream-connector-ref> <policy ref="news-address-federation"/> </downstream> <address-policy name="news-address-federation" max-hops="1" auto-delete="true" auto-delete-delay="300000" auto-delete-message-count="-1" transformer-ref="news-transformer"> <include address-match="queue.bbc.new" /> <include address-match="queue.usatoday" /> <include address-match="queue.news.#" /> <exclude address-match="queue.news.sport.#" /> </address-policy> <transformer name="news-transformer"> <class-name>org.myorg.NewsTransformer</class-name> <property key="key1" value="value1"/> <property key="key2" value="value2"/> </transformer> </federation> ... </federations>
이전 구성에 표시된 대로 원격 브로커는 이제 로컬 브로커의 다운스트림으로 간주됩니다. 다운스트림 브로커는 구성의 연결 정보를 사용하여 로컬(즉, 업스트림) 브로커에 다시 연결합니다.
로컬 브로커에서 로컬 및 원격 브로커가 페더레이션 연결을 설정하는 데 사용하는 커넥터와 수락을 추가합니다. 예를 들면 다음과 같습니다.
<connectors> <connector name="netty-connector">tcp://localhost:61616</connector> <connector name="eu-west-1-connector">tcp://localhost:61616</connector> <connector name="eu-east-1-connector">tcp://localhost:61617</connector> </connectors> <acceptors> <acceptor name="netty-acceptor">tcp://localhost:61616</acceptor> </acceptors>
connector name="netty-connector"
- 로컬 브로커가 원격 브로커에 전송하는 커넥터 구성입니다. 원격 브로커는 이 구성을 사용하여 로컬 브로커에 다시 연결합니다.
connector name="eu-west-1-connector"
,connector name="eu-east-1-connector"
- 원격 브로커에 연결합니다. 로컬 브로커는 이러한 커넥터를 사용하여 원격 브로커에 연결하고 원격 브로커가 로컬 브로커에 다시 연결하는 데 필요한 구성을 공유합니다.
acceptor name="netty-acceptor"
- 원격 브로커가 로컬 브로커에 다시 연결하는 데 사용하는 커넥터에 해당하는 로컬 브로커의 수락자.
4.22.4.2.4. 큐 페더레이션 정보
큐 페더레이션은 다른 원격 브로커의 로컬 브로커에서 단일 큐의 부하를 분산하는 방법을 제공합니다.
부하 분산을 달성하기 위해 로컬 브로커는 로컬 소비자의 메시지에 대한 요구를 충족하기 위해 원격 대기열에서 메시지를 검색합니다. 예를 들면 다음과 같습니다.
그림 4.9. 대칭 큐 페더레이션
원격 큐를 재구성할 필요가 없으며 동일한 브로커 또는 동일한 클러스터에 있을 필요가 없습니다. 원격 링크를 설정하는 데 필요한 모든 구성이 로컬 브로커에 있습니다.
4.22.4.2.4.1. 큐 페더레이션의 이점
아래에 설명 된 몇 가지 이유는 큐 페더레이션을 구성하도록 선택할 수 있습니다.
- 용량 증가
- 큐 페더레이션은 많은 브로커에 분산되는 "논리적" 큐를 만들 수 있습니다. 이 논리 분산 큐는 단일 브로커의 단일 큐보다 용량이 훨씬 높습니다. 이 설정에서 가능한 많은 메시지가 원래 게시 된 브로커에서 소비됩니다. 시스템은 부하 분산이 필요한 경우에만 페더레이션에서 메시지를 이동합니다.
- 다중 리전 설정 배포
다중 지역 설정에서는 한 지역 또는 장소에 메시지 생산자가 있을 수 있으며 다른 지역에는 소비자가 있을 수 있습니다. 그러나 지정된 지역의 생산자 및 소비자 연결을 로컬로 유지하는 것이 이상적이어야 합니다. 이 경우 생산자와 소비자인 각 리전에 브로커를 배포하고 큐 페더레이션을 사용하여 지역 간에 메시지를 이동할 수 있습니다. 예를 들면 다음과 같습니다.
그림 4.10. 다중 지역 대기열 페더레이션
- 안전한 엔터프라이즈 LAN과 DMZ 간 통신
네트워킹 보안에서 DMZ(분밀 화된 영역 )는 엔터프라이즈의 외부 연결 서비스를 포함하는 물리적 또는 논리 서브네트워크이며 일반적으로 인터넷과 같이 더 큰 네트워크를 신뢰할 수 없는 네트워크에 노출합니다. 엔터프라이즈의 나머지 LAN(Local Area Network)은 방화벽 뒤에서 이 외부 네트워크와 격리되어 있습니다.
다수의 메시지 생산자가 DMZ에 있고 보안 엔터프라이즈 LAN의 많은 소비자가 있는 경우 생산자가 보안 엔터프라이즈 LAN의 브로커에 연결할 수 있도록 하는 것이 적절하지 않을 수 있습니다. 이 경우 생산자가 메시지를 게시할 수 있는 DMZ에 브로커를 배포할 수 있습니다. 그런 다음 엔터프라이즈 LAN의 브로커는 DMZ의 브로커에 연결하고 페더레이션 대기열을 사용하여 DMZ 브로커에서 메시지를 수신할 수 있습니다.
4.22.4.2.5. 업스트림 큐 페더레이션 구성
다음 예제에서는 독립 실행형 브로커에 대해 업스트림 큐 페더레이션을 구성하는 방법을 보여줍니다. 이 예에서는 로컬(즉, 다운스트림) 브로커에서 일부 원격(즉, 업스트림) 브로커로 페더레이션을 구성합니다.
사전 요구 사항
- 다음 예제에서는 독립 실행형 브로커 간에 큐 페더레이션을 구성하는 방법을 보여줍니다. 그러나 브로커 클러스터에 대한 페더레이션 구성을 위한 요구 사항도 숙지해야 합니다. 자세한 내용은 4.22.4.2.1절. “브로커 클러스터에 대한 페더레이션 구성”의 내용을 참조하십시오.
프로세스
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. 새로운 <
federations
> 요소 내에서 <federation>
요소를 추가합니다. 예를 들면 다음과 같습니다.<federations> <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> </federation> </federations>
name
- 페더레이션 구성의 이름입니다. 이 예에서 이름은 다운스트림 브로커의 이름에 해당합니다.
user
- 업스트림 브로커에 연결하기 위한 공유 사용자 이름입니다.
암호
- 업스트림 브로커에 연결하기 위한 공유 암호입니다.
참고- 업스트림 브로커의 경우 사용자 및 암호 인증 정보가 다른 경우 구성에 추가할 때 해당 브로커의 인증 정보를 별도로 지정할 수 있습니다. 이 내용은 이 절차의 뒷부분에서 설명합니다.
federation
요소 내에서 <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
로 설정되면 구성이 이미 제공된 소비자(즉, 페더레이션 대기열의 소비자)를 다시 제공하지 않습니다. 이렇게 하면 대칭 또는 closed-loop 토폴로지에서 공급되지 않은 소비자가 없고 메시지가 시스템 전체에서 지속적으로 전달되는 상황을 방지할 수 있습니다.closed-loop 토폴로지가 없는 경우 이 속성의 값을
true
로 설정할 수 있습니다. 예를 들어BrokerA
,BrokerB
및BrokerC
의 세 가지 브로커 체인과BrokerA
의 생산자와BrokerC
의 소비자가 있다고 가정합니다. 이 경우BrokerB
가 소비자를BrokerA
에 다시 공급하기를 원할 것입니다.priority-adjustment
소비자가 큐에 연결하면 업스트림(즉, 페더레이션) 소비자가 생성될 때 우선 순위가 사용됩니다. 페더레이션 소비자의 우선순위는
우선순위 조정 속성의 값에 의해 조정
됩니다. 이 속성의 기본값은-1
이며, 이는 로컬 소비자가 로드 밸런싱 중에 페더레이션 소비자보다 우선 순위를 갖도록 합니다. 그러나 필요에 따라 우선순위 조정의 값을 변경할 수 있습니다.우선 순위 조정이 너무 많은 메시지가 페더레이션 소비자로 이동하는 것을 방지하기에 불충분하여 브로커 간에 메시지를 이동할 수 있는 경우 페더레이션 소비자로 이동하는 메시지 배치 크기를 제한할 수 있습니다. 배치 크기를 제한하려면 페더레이션 소비자의 연결 URI에서
consumerWindowSize
값을0
으로 설정합니다.tcp://<host>:<port>?consumerWindowSize=0
consumerWindowSize
값을0
으로 설정하면 AMQ Broker는 일치하는 주소에 대한 주소 설정에defaultConsumerWindowSize
매개변수 값을 사용하여 브로커 간에 이동할 수 있는 메시지의 배치 크기를 결정합니다.defaultConsumerWindowSize
속성의 기본값은1048576
바이트입니다.Transformer-ref
- 변환기 구성의 이름입니다. 페더 메시지 전송 중에 메시지를 변환하려면 변환기 구성을 추가할 수 있습니다. Transformer 구성은 이 절차의 뒷부분에서 설명합니다.
<
;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"> <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>
포함
이 요소의
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.myorg.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.myorg.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
-
업스트림 브로커에 대한 연결을 생성할 때 사용할 사용자 이름입니다. 지정하지 않으면
페더레이션
요소의 구성에 지정된 공유 사용자 이름이 사용됩니다. 암호
-
업스트림 브로커에 대한 연결을 생성할 때 사용할 암호입니다. 지정하지 않으면
federation
요소의 구성에 지정된 공유 암호가 사용됩니다. 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.6절. “브로커 검색 방법” 을 참조하십시오. ha
-
업스트림 브로커 연결에 고가용성이 활성화되어 있는지 여부를 지정합니다. 이 매개변수의 값이
true
로 설정된 경우 로컬 브로커는 업스트림 클러스터에서 사용 가능한 브로커에 연결할 수 있으며 라이브 업스트림 브로커가 종료되면 백업 브로커에 자동으로 실패할 수 있습니다. 기본값은false
입니다. initial-connect-attempts
-
다운스트림 브로커가 업스트림 브로커에 연결하기 위해 생성하는 초기 시도 횟수입니다. 연결을 설정하지 않고 이 값에 도달하면 업스트림 브로커가 영구적으로 오프라인으로 간주됩니다. 다운스트림 브로커는 더 이상 업스트림 브로커로 메시지를 라우팅하지 않습니다. 기본값은
-1
이며 이는 제한이 없음을 의미합니다. max-retry-interval
-
원격 브로커에 연결할 때 후속 재연결 사이의 최대 시간(밀리초)입니다. 기본값은
2000
입니다. 재연결-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>
참고대용량 메시지가 페더레이션 연결을 통과하도록 하려면 페더레이션 연결에 사용되는 커넥터에서
consumerWindowSize
매개변수를 -1로 설정합니다.consumerWindowSize
매개변수를 -1로 설정하면 이 매개변수에 대한 제한이 설정되어 있지 않으므로 대규모 메시지가 연결을 통과할 수 있습니다. 예를 들면 다음과 같습니다.<connectors> <connector name="eu-west-1-connector">tcp://localhost:61616?consumerWindowSize=-1</connector> <connector name="eu-east-1-connector">tcp://localhost:61617?consumerWindowSize=-1</connector> </connectors>
대규모 메시지에 대한 자세한 내용은 8장. 대용량 메시지 처리 을 참조하십시오.
4.22.4.2.6. 다운스트림 대기열 페더레이션 구성
다음 예제에서는 다운스트림 큐 페더레이션을 구성하는 방법을 보여줍니다.
다운스트림 큐 페더레이션을 사용하면 하나 이상의 원격 브로커가 로컬 브로커에 다시 연결하는 데 사용하는 로컬 브로커에 구성을 추가할 수 있습니다. 이 접근 방식의 장점은 모든 페더레이션 구성을 단일 브로커에 유지할 수 있다는 것입니다. 예를 들어 hub-and-spoke 토폴로지에 유용한 접근 방식이 될 수 있습니다.
다운스트림 큐 페더레이션은 페더레이션 연결 방향과 업스트림 대기열 구성의 방향을 되돌립니다. 따라서 구성에 원격 브로커를 추가하면 다운스트림 브로커로 간주됩니다. 다운스트림 브로커는 구성의 연결 정보를 사용하여 이제 업스트림으로 간주되는 로컬 브로커에 다시 연결합니다. 이 문제는 원격 브로커에 대한 구성을 추가할 때 이 예제의 뒷부분에서 설명합니다.
사전 요구 사항
- 업스트림 큐 페더레이션 구성에 대해 잘 알고 있어야 합니다. 4.22.4.2.5절. “업스트림 큐 페더레이션 구성”을 참조하십시오.
- 다음 예제에서는 독립 실행형 브로커 간에 큐 페더레이션을 구성하는 방법을 보여줍니다. 그러나 브로커 클러스터에 대한 페더레이션 구성을 위한 요구 사항도 숙지해야 합니다. 자세한 내용은 4.22.4.2.1절. “브로커 클러스터에 대한 페더레이션 구성”의 내용을 참조하십시오.
프로세스
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. <
federation> 요소를 포함하는 <
요소를 추가합니다. 예를 들면 다음과 같습니다.federations
><federations> <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> </federation> </federations>
큐 정책 구성을 추가합니다. 예를 들면 다음과 같습니다.
<federations> ... <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <queue-policy name="news-queue-federation" priority-adjustment="-5" include-federated="true" transformer-ref="new-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>
전송 전에 메시지를 변환하려면 변환기 구성을 추가합니다. 예를 들면 다음과 같습니다.
<federations> ... <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <queue-policy name="news-queue-federation" priority-adjustment="-5" include-federated="true" 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.myorg.NewsTransformer</class-name> <property key="key1" value="value1"/> <property key="key2" value="value2"/> </transformer> </federation> ... </federations>
각 원격 브로커에 대한
다운스트림
요소를 추가합니다. 예를 들면 다음과 같습니다.<federations> ... <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9"> <downstream name="eu-east-1"> <static-connectors> <connector-ref>eu-east-connector1</connector-ref> </static-connectors> <upstream-connector-ref>netty-connector</upstream-connector-ref> <policy ref="news-address-federation"/> </downstream> <downstream name="eu-west-1" > <static-connectors> <connector-ref>eu-west-connector1</connector-ref> </static-connectors> <upstream-connector-ref>netty-connector</upstream-connector-ref> <policy ref="news-address-federation"/> </downstream> <queue-policy name="news-queue-federation" priority-adjustment="-5" include-federated="true" transformer-ref="new-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.myorg.NewsTransformer</class-name> <property key="key1" value="value1"/> <property key="key2" value="value2"/> </transformer> </federation> ... </federations>
이전 구성에 표시된 대로 원격 브로커는 이제 로컬 브로커의 다운스트림으로 간주됩니다. 다운스트림 브로커는 구성의 연결 정보를 사용하여 로컬(즉, 업스트림) 브로커에 다시 연결합니다.
로컬 브로커에서 로컬 및 원격 브로커가 페더레이션 연결을 설정하는 데 사용하는 커넥터와 수락을 추가합니다. 예를 들면 다음과 같습니다.
<connectors> <connector name="netty-connector">tcp://localhost:61616</connector> <connector name="eu-west-1-connector">tcp://localhost:61616</connector> <connector name="eu-east-1-connector">tcp://localhost:61617</connector> </connectors> <acceptors> <acceptor name="netty-acceptor">tcp://localhost:61616</acceptor> </acceptors>
connector name="netty-connector"
- 로컬 브로커가 원격 브로커에 전송하는 커넥터 구성입니다. 원격 브로커는 이 구성을 사용하여 로컬 브로커에 다시 연결합니다.
connector name="eu-west-1-connector"
,connector name="eu-east-1-connector"
- 원격 브로커에 연결합니다. 로컬 브로커는 이러한 커넥터를 사용하여 원격 브로커에 연결하고 원격 브로커가 로컬 브로커에 다시 연결하는 데 필요한 구성을 공유합니다.
acceptor name="netty-acceptor"
원격 브로커가 로컬 브로커에 다시 연결하는 데 사용하는 커넥터에 해당하는 로컬 브로커의 수락자.
참고페더레이션 연결을 통해 많은 메시지가 전송되도록 하려면 페더레이션 연결에 사용되는 커넥터에서
consumerWindowSize
매개변수를 -1로 설정합니다.consumerWindowSize
매개변수를 -1로 설정하면 이 매개변수에 대한 제한이 설정되어 있지 않으므로 대규모 메시지가 연결을 통과할 수 있습니다. 예를 들면 다음과 같습니다.<connectors> <connector name="eu-west-1-connector">tcp://localhost:61616?consumerWindowSize=-1</connector> <connector name="eu-east-1-connector">tcp://localhost:61617?consumerWindowSize=-1</connector> </connectors>
대규모 메시지에 대한 자세한 내용은 8장. 대용량 메시지 처리 을 참조하십시오.