검색

4.22. 주소 및 대기열 페더링

download PDF

페더레이션을 사용하면 브로커가 공통 클러스터에 있을 필요 없이 브로커 간에 메시지를 전송할 수 있습니다. 브로커는 독립 실행형 또는 별도의 클러스터에 있을 수 있습니다. 또한 소스 및 대상 브로커는 다른 관리 도메인에 있을 수 있으므로 브로커의 구성, 사용자 및 보안 설정이 다를 수 있습니다. 브로커는 다른 AMQ Broker 버전을 사용할 수도 있습니다.

예를 들어, 페더레이션은 한 클러스터에서 다른 클러스터로 메시지를 안정적으로 보내는 데 적합합니다. 이 전송은 WAN(Wide Area Network), 클라우드 인프라의 리전 또는 인터넷을 통해 발생할 수 있습니다. 소스 브로커에서 대상 브로커로의 연결이 끊어지면(예: 네트워크 장애로 인해) 대상 브로커가 온라인 상태가 될 때까지 연결을 다시 설정하려고 합니다. 대상 브로커가 다시 온라인 상태가 되면 메시지 전송이 재개됩니다.

관리자는 주소 및 대기열 정책을 사용하여 페더레이션을 관리할 수 있습니다. 정책 구성은 특정 주소 또는 큐와 일치하거나 정책에 주소 또는 큐 세트 와 구성과 일치하는 와일드카드 표현식을 포함할 수 있습니다. 따라서, 페더레이션은 큐 또는 주소가 일치 세트에 추가되거나 제거될 때 동적으로 적용될 수 있습니다. 정책에는 특정 주소 및 큐를 포함하거나 제외하는 여러 표현식이 포함될 수 있습니다. 또한 브로커 또는 브로커 클러스터에 여러 정책을 적용할 수 있습니다.

AMQ Broker에서 두 가지 주요 페더레이션 옵션은 주소 페더레이션대기열 페더레이션 입니다. 이러한 옵션은 다음 섹션에 설명되어 있습니다.

참고

브로커에는 페더레이션 로컬 전용 구성 요소에 대한 구성이 포함될 수 있습니다. 즉, 브로커에 페더레이션을 구성하면 해당 브로커의 모든 것을 페더레이션할 필요가 없습니다.

4.22.1. 주소 페더레이션 정보

주소 페더레이션은 연결된 브로커 간의 전체 멀티 캐스트 배포 패턴과 같습니다. 예를 들어 BrokerA 의 주소로 전송된 모든 메시지는 해당 브로커의 모든 큐에 전달됩니다. 또한 각 메시지는 BrokerB 및 여기에 연결된 모든 큐에 전달됩니다.

주소 페더레이션은 원격 브로커의 주소에 브로커를 동적으로 연결합니다. 예를 들어 로컬 브로커가 원격 브로커의 주소에서 메시지를 가져오려는 경우 원격 주소에 큐가 자동으로 생성됩니다. 그러면 원격 브로커의 메시지가 이 큐로 사용됩니다. 마지막으로 메시지는 원래 로컬 주소에 직접 게시 된 것처럼 로컬 브로커의 해당 주소에 복사됩니다.

원격 브로커는 페더레이션이 주소를 만들 수 있도록 재구성할 필요가 없습니다. 그러나 로컬 브로커에 원격 주소에 대한 권한을 부여해야 합니다.

4.22.2. 주소 페더레이션의 일반적인 토폴로지

주소 페더레이션 사용에 대한 몇 가지 일반적인 토폴로지는 아래에 설명되어 있습니다.

대칭 토폴로지

대칭 토폴로지에서 생산자와 소비자는 각 브로커에 연결됩니다. 대기열과 소비자는 생산자가 게시한 메시지를 수신할 수 있습니다. 다음은 대칭 토폴로지의 예입니다.

그림 4.1. 대칭 토폴로지의 주소 페더레이션

대칭 주소 페더레이션

대칭 토폴로지에 대한 주소 페더레이션을 구성할 때 주소 정책의 max-hops 속성 값을 1 로 설정하는 것이 중요합니다. 이렇게 하면 순환 복제를 방지하여 메시지가 한 번만 복사됩니다. 이 속성이 더 큰 값으로 설정된 경우 소비자는 동일한 메시지의 복사본을 여러 개 받습니다.

전체 메시 토폴로지

전체 메시 토폴로지는 대칭 설정과 유사합니다. 3 개 이상의 브로커가 서로 대칭적으로 페더레이션되어 전체 메시를 생성합니다. 이 설정에서 생산자와 소비자는 각 브로커에 연결됩니다. 큐 및 소비자는 프로듀서에서 게시한 메시지를 수신할 수 있습니다. 이 토폴로지의 예는 다음과 같습니다.

그림 4.2. 전체 메시 토폴로지의 주소 페더레이션

전체 메시 주소 페더레이션

대칭 설정과 마찬가지로 전체 메시 토폴로지에 대한 주소 페더레이션을 구성할 때 주소 정책의 max-hops 속성 값을 1 로 설정하는 것이 중요합니다. 이렇게 하면 순환 복제를 방지하여 메시지가 한 번만 복사됩니다.

링 토폴로지

브로커 링에서 각 페더레이션 주소는 링의 서로만 업스트림으로 지정됩니다. 이 토폴로지의 예는 다음과 같습니다.

그림 4.3. 링 토폴로지의 주소 페더레이션

링 주소 페더레이션

순환 복제를 방지하기 위해 링 토폴로지에 대한 페더레이션을 구성할 때 주소 정책의 max-hops 속성을 n-1 값으로 설정하는 것이 중요합니다. 여기서 n 은 링의 노드 수입니다. 예를 들어 위에 표시된 링 토폴로지에서 max-hops 값은 5 로 설정됩니다. 이렇게 하면 링의 모든 주소가 정확히 한 번 메시지를 볼 수 있습니다.

링 토폴로지의 장점은 설정해야 하는 물리적 연결 수와 관련하여 설정 비용이 저렴합니다. 그러나 이러한 유형의 토폴로지의 단점은 단일 브로커가 실패하면 전체 링이 실패한다는 것입니다.

페인아웃 토폴로지

팬아웃 토폴로지에서는 단일 마스터 주소가 페더레이션 주소 트리에 의해 연결됩니다. 마스터 주소에 게시된 모든 메시지는 트리의 모든 브로커에 연결된 모든 소비자가 수신할 수 있습니다. 트리는 모든 깊이로 구성할 수 있습니다. 트리의 기존 브로커를 다시 구성할 필요 없이 트리를 확장할 수도 있습니다. 이 토폴로지의 예는 다음과 같습니다.

그림 4.4. 팬아웃 토폴로지의 페더레이션 주소

팬아웃 주소 페더레이션

팬아웃 토폴로지에 대한 페더레이션을 구성할 때 주소 정책의 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. 브로커 클러스터의 페더레이션 구성

다음 섹션의 예제에서는 독립 실행형 로컬 브로커와 원격 브로커 간의 주소 및 대기열 통합을 구성하는 방법을 보여줍니다. 독립 실행형 브로커 간의 페더레이션의 경우 페더레이션 구성의 이름과 주소 및 대기열 정책의 이름은 로컬 및 원격 브로커 간에 고유해야 합니다.

그러나 클러스터에서 브로커에 대한 페더레이션을 구성하는 경우 추가 요구 사항이 있습니다. 클러스터형 브로커의 경우 페더레이션 구성의 이름과 해당 구성 내의 주소 및 대기열 정책의 이름은 해당 클러스터의 모든 브로커에 대해 동일해야 합니다.

동일한 클러스터의 브로커가 동일한 페더레이션 구성 및 주소 및 대기열 정책 이름을 사용하도록 하여 메시지 중복을 방지합니다. 예를 들어, 동일한 클러스터 내의 브로커에 페더레이션 구성 이름이 다른 경우 동일한 주소에 대해 다르게 이름이 지정된 전달 대기열이 여러 개 생성되어 다운스트림 소비자에게 메시지가 복제되는 상황이 발생할 수 있습니다. 반대로 동일한 클러스터의 브로커가 동일한 페더레이션 구성 이름을 사용하는 경우 기본적으로 다운스트림 소비자에게 부하 분산되는 복제된 클러스터형 전달 대기열을 생성합니다. 이렇게 하면 메시지 중복을 방지할 수 있습니다.

4.22.5. 업스트림 주소 페더레이션 구성

다음 예제는 독립 실행형 브로커 간에 업스트림 주소 페더레이션을 구성하는 방법을 보여줍니다. 이 예제에서는 로컬(즉, 다운스트림) 브로커에서 일부 원격(즉, 업스트림) 브로커로 페더레이션을 구성합니다.

사전 요구 사항

  • 다음 예제에서는 독립 실행형 브로커 간 주소 통합을 구성하는 방법을 보여줍니다. 그러나 브로커 클러스터에 대한 페더레이션을 구성하기 위한 요구 사항도 잘 알고 있어야 합니다. 자세한 내용은 4.22.4절. “브로커 클러스터의 페더레이션 구성”의 내용을 참조하십시오.

절차

  1. &lt ;broker_instance_dir> /etc/broker.xml 구성 파일을 엽니다.
  2. < federation> 요소를 포함하는 새 < federations > 요소를 추가합니다. 예를 들면 다음과 같습니다.

    <federations>
      <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
      </federation>
    </federations>
    name
    페더레이션 구성의 이름입니다. 이 예에서 name은 로컬 브로커의 이름에 해당합니다.
    user
    업스트림 브로커에 연결하기 위한 공유 사용자 이름입니다.
    암호
    업스트림 브로커에 연결하기 위한 공유 암호입니다.
    참고

    원격 브로커에 대해 사용자 및 암호 인증 정보가 다른 경우 구성에 추가할 때 해당 브로커의 인증 정보를 별도로 지정할 수 있습니다. 이 내용은 이 절차의 뒷부분에서 설명합니다.

  3. 페더레이션 요소 내에서 < 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 구성은 이 절차의 뒷부분에서 설명합니다.
  4. &lt ;address-policy > 요소 내에 주소를 포함 및 제외할 address-matching 패턴을 추가합니다. 예를 들면 다음과 같습니다.

    <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>
    include
    이 요소의 address-match 속성 값은 주소 정책에 포함할 주소를 지정합니다. 정확한 주소를 지정할 수 있습니다(예: queue.bbc.new 또는 queue.usatoday ). 또는 와일드카드 표현식을 사용하여 일치하는 주소 집합을 지정할 수 있습니다. 이전 예에서 주소 정책에는 문자열 queue.news 로 시작하는 모든 주소 이름도 포함됩니다.
    exclude
    이 요소의 address-match 속성 값은 주소 정책에서 제외할 주소를 지정합니다. 정확한 주소 이름을 지정하거나 와일드카드 표현식을 사용하여 일치하는 주소 집합을 지정할 수 있습니다. 이전 예에서 address 정책은 queue.news.sport 문자열로 시작하는 모든 주소 이름을 제외합니다.
  5. (선택 사항) 페더레이션 요소에서 사용자 지정 변환기 구현을 참조하는 변환자 요소를 추가합니다. 예를 들면 다음과 같습니다.

    <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.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 인터페이스를 구현하는 사용자 정의 클래스의 이름입니다.

    변환기의 transform() 메서드는 메시지가 전송되기 전에 메시지와 함께 호출됩니다. 이렇게 하면 메시지 헤더 또는 본문이 페더레이션되기 전에 변환될 수 있습니다.

    속성
    특정 변환기 구성에 대해 키-값 쌍을 보유하는 데 사용됩니다.
  6. 페더레이션 요소 내에서 하나 이상의 업스트림 요소를 추가합니다. 각 업스트림 요소는 원격 브로커에 대한 연결을 정의하고 해당 연결에 적용할 정책을 정의합니다. 예를 들면 다음과 같습니다.

    <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.foo.NewsTransformer</class-name>
                <property key="key1" value="value1"/>
                <property key="key2" value="value2"/>
            </transformer>
    
        </federation>
    </federations>
    static-connectors
    로컬 브로커의 broker.xml 구성 파일의 다른 위치에서 정의된 커넥터 요소를 참조하는 connector -ref 요소 목록이 포함되어 있습니다. 커넥터는 발신 연결에 사용할 전송(TCP, SSL, HTTP 등) 및 서버 연결 매개 변수(호스트, 포트 등)를 정의합니다. 이 절차의 다음 단계에서는 static-connectors 요소에서 참조되는 커넥터를 추가하는 방법을 보여줍니다.
    policy-ref
    업스트림 브로커에 적용되는 다운스트림 브로커에 구성된 주소 정책의 이름입니다.

    업스트림 요소에 대해 지정할 수 있는 추가 옵션은 다음과 같습니다.

    name
    업스트림 브로커 구성의 이름입니다. 이 예에서 이름은 eu-east-1eu-west-1 이라는 업스트림 브로커에 해당합니다.
    user
    업스트림 브로커에 대한 연결을 생성할 때 사용할 사용자 이름입니다. 지정하지 않으면 페더레이션 요소의 구성에 지정된 공유 사용자 이름이 사용됩니다.
    암호
    업스트림 브로커에 대한 연결을 생성할 때 사용할 암호입니다. 지정하지 않으면 페더레이션 요소의 구성에 지정된 공유 암호가 사용됩니다.
    call-failover-timeout
    call-timeout 과 유사하지만 페일오버 시도 중에 호출이 수행될 때 사용됩니다. 기본값은 -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
    업스트림 브로커에 대한 연결에 high availability가 활성화되어 있는지 여부를 지정합니다. 이 매개변수의 값이 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입니다.
  7. 로컬 브로커에서 원격 브로커에 커넥터를 추가합니다. 이러한 커넥터는 페더레이션 주소 구성의 정적 연결 요소에서 참조됩니다. 예를 들면 다음과 같습니다.

    <connectors>
       <connector name="eu-west-1-connector">tcp://localhost:61616</connector>
       <connector name="eu-east-1-connector">tcp://localhost:61617</connector>
    </connectors>

4.22.6. 다운스트림 주소 페더레이션 구성

다음 예제는 독립 실행형 브로커에 대한 다운스트림 주소 페더레이션을 구성하는 방법을 보여줍니다.

다운스트림 주소 페더레이션을 사용하면 하나 이상의 원격 브로커가 로컬 브로커에 다시 연결하는 데 사용하는 로컬 브로커에 구성을 추가할 수 있습니다. 이 접근 방식의 장점은 모든 페더레이션 구성을 단일 브로커에 유지할 수 있다는 점입니다. 예를 들어 hub-and-spoke 토폴로지에 유용한 접근 방식이 될 수 있습니다.

참고

다운스트림 주소 페더레이션은 페더레이션 연결의 방향과 업스트림 주소 구성을 역전합니다. 따라서 구성에 원격 브로커를 추가하면 다운스트림 브로커로 간주됩니다. 다운스트림 브로커는 구성의 연결 정보를 사용하여 이제 업스트림으로 간주되는 로컬 브로커에 다시 연결합니다. 이 내용은 원격 브로커에 대한 구성을 추가할 때 이 예의 뒷부분에 설명되어 있습니다.

사전 요구 사항

절차

  1. 로컬 브로커에서 < broker_instance_dir> /etc/broker.xml 구성 파일을 엽니다.
  2. < federation> 요소를 포함하는 < federations > 요소를 추가합니다. 예를 들면 다음과 같습니다.

    <federations>
        <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
        </federation>
    </federations>
  3. 주소 정책 구성을 추가합니다. 예를 들면 다음과 같습니다.

    <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>
  4. 전송 전에 메시지를 변환하려면 변환기 구성을 추가합니다. 예를 들면 다음과 같습니다.

    <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.foo.NewsTransformer</class-name>
                <property key="key1" value="value1"/>
                <property key="key2" value="value2"/>
            </transformer>
    
        </federation>
      ...
    </federations>
  5. 각 원격 브로커에 대해 downstream 요소를 추가합니다. 예를 들면 다음과 같습니다.

    <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>
                    <transport-connector-ref>netty-connector</transport-connector-ref>
                    <policy ref="news-address-federation"/>
            </downstream>
    
            <downstream name="eu-west-1" >
                    <static-connectors>
                        <connector-ref>eu-west-connector1</connector-ref>
                    </static-connectors>
                    <transport-connector-ref>netty-connector</transport-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.foo.NewsTransformer</class-name>
                <property key="key1" value="value1"/>
                <property key="key2" value="value2"/>
            </transformer>
    
        </federation>
      ...
    </federations>

    이전 구성에 표시된 대로 원격 브로커는 이제 로컬 브로커의 다운스트림으로 간주됩니다. 다운스트림 브로커는 구성의 연결 정보를 사용하여 로컬(즉, 업스트림) 브로커에 다시 연결합니다.

  6. 로컬 브로커에서 로컬 및 원격 브로커가 사용하는 커넥터 및 어셉터를 추가하여 페더레이션 연결을 설정합니다. 예를 들면 다음과 같습니다.

    <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.7. 대기열 페더레이션 정보

대기열 페더레이션은 로컬 브로커에서 단일 대기열의 부하를 다른 원격 브로커 간에 균형을 유지하는 방법을 제공합니다.

부하 분산을 달성하기 위해 로컬 브로커는 로컬 소비자의 메시지 수요를 충족하기 위해 원격 대기열에서 메시지를 검색합니다. 예는 다음과 같습니다.

그림 4.5. 대칭 대기열 페더레이션

대칭 대기열 페더레이션

원격 대기열을 재구성할 필요는 없으며 동일한 브로커 또는 동일한 클러스터에 있을 필요가 없습니다. 원격 링크를 설정하는 데 필요한 모든 구성이 로컬 브로커에 있으며 페더레이션 대기열은 모두 로컬 브로커에 있습니다.

4.22.7.1. 대기열 페더레이션의 이점

아래에 설명된 내용은 대기열 페더레이션을 구성하기 위해 선택할 수 있는 몇 가지 이유입니다.

용량 증가
대기열 페더레이션은 많은 브로커에 걸쳐 분배되는 "과학적인" 대기열을 생성할 수 있습니다. 이 논리 분산 큐는 단일 브로커의 단일 대기열보다 용량이 훨씬 높습니다. 이 설정에서 가능한 한 많은 메시지가 원래 게시 된 브로커로부터 소비됩니다. 시스템은 부하 분산이 필요한 경우에만 페더레이션에서 메시지를 이동합니다.
다중 리전 설정 배포

다중 지역 설정에서는 한 리전 또는 지역에 메시지 생산자와 소비자가 있을 수 있습니다. 그러나 특정 지역의 생산자 및 소비자 연결을 로컬로 유지하는 것이 좋습니다. 이 경우 생산자와 소비자가 있는 각 지역에 브로커를 배포하고 대기열 페더레이션을 사용하여 지역 간에 WAN(Wide Area Network)을 통해 메시지를 이동할 수 있습니다. 예는 다음과 같습니다.

그림 4.6. 다중 지역 대기열 페더레이션

다중 리전 대기열 페더레이션
보안 엔터프라이즈 LAN과 DMZ 간의 통신

네트워킹 보안에서 DMZ(비밀도 영역 )는 엔터프라이즈의 외부 연결 서비스를 포함하며 일반적으로 인터넷과 같은 신뢰할 수 없는 네트워크에 공개하는 물리적 또는 논리적 서브네트워크입니다. 기업의 나머지 LAN(Local Area Network)은 방화벽 뒤에서 이 외부 네트워크와 격리되어 있습니다.

다수의 메시지 생산자가 DMZ에 있고 보안 엔터프라이즈 LAN의 여러 소비자에 있는 경우 생산자가 안전한 엔터프라이즈 LAN의 브로커에 연결하는 것이 적절하지 않을 수 있습니다. 이 경우 생산자가 메시지를 게시할 수 있는 브로커를 DMZ에 배포할 수 있습니다. 그런 다음 엔터프라이즈 LAN의 브로커는 DMZ의 브로커에 연결하고 페더레이션 대기열을 사용하여 DMZ의 브로커로부터 메시지를 수신할 수 있습니다.

4.22.8. 업스트림 대기열 페더레이션 구성

다음 예제는 독립 실행형 브로커에 대한 업스트림 대기열 페더레이션을 구성하는 방법을 보여줍니다. 이 예제에서는 로컬(즉, 다운스트림) 브로커에서 일부 원격(즉, 업스트림) 브로커로 페더레이션을 구성합니다.

사전 요구 사항

  • 다음 예제에서는 독립 실행형 브로커 간 대기열 페더레이션을 구성하는 방법을 보여줍니다. 그러나 브로커 클러스터에 대한 페더레이션을 구성하기 위한 요구 사항도 잘 알고 있어야 합니다. 자세한 내용은 4.22.4절. “브로커 클러스터의 페더레이션 구성”의 내용을 참조하십시오.

절차

  1. &lt ;broker_instance_dir&gt; /etc/broker.xml 구성 파일을 엽니다.
  2. 새 < federations > 요소 내에서 < federation> 요소를 추가합니다. 예를 들면 다음과 같습니다.

    <federations>
      <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
      </federation>
    </federations>
    name
    페더레이션 구성의 이름입니다. 이 예에서 name은 다운스트림 브로커의 이름에 해당합니다.
    user
    업스트림 브로커에 연결하기 위한 공유 사용자 이름입니다.
    암호
    업스트림 브로커에 연결하기 위한 공유 암호입니다.
    참고
    • 사용자 및 암호 인증 정보가 업스트림 브로커에 대해 다른 경우 구성에 추가할 때 해당 브로커의 인증 정보를 별도로 지정할 수 있습니다. 이 내용은 이 절차의 뒷부분에서 설명합니다.
  3. 페더레이션 요소 내에 < queue-policy> 요소를 추가합니다. < queue-policy&gt; 요소의 속성 값을 지정합니다. 예를 들면 다음과 같습니다.

    <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 토폴로지가 없는 경우 이 속성의 값을 true 로 설정할 수 있습니다. 예를 들어 BrokerA,BrokerBBrokerC 의 생산자와 BrokerC의 생산자와 함께 세 개의 브로커, BrokerA, BrokerC 의 체인이 있다고 가정합니다. 이 경우 BrokerB 에서 BrokerA 에 소비자를 다시 주도록 합니다.

    priority-adjustment
    소비자가 큐에 연결하면 업스트림(즉 페더레이션된) 소비자가 생성될 때 우선순위가 사용됩니다. 페더레이션 소비자의 우선 순위는 priority-adjustment 속성의 값으로 조정됩니다. 이 속성의 기본값은 -1 이며, 로드 밸런싱 중에 로컬 소비자가 페더레이션 소비자보다 우선 순위를 지정할 수 있습니다. 그러나 필요에 따라 우선순위 조정 값을 변경할 수 있습니다.
참고

로컬 소비자에게 주어진 우선 순위에도 불구하고, 페더레이션 소비자는 너무 많은 메시지가 페더레이션 소비자로 이동하는 속도로 메시지를 소비하는 경우, 귀하는 연결된 소비자가 메시지를 소비하는 속도를 제한할 수 있습니다. 메시지 사용 속도를 제한하려면 페더레이션 소비자의 클라이언트 연결 URI에서 consumerMaxRate 흐름 제어 옵션을 구성합니다. 자세한 내용은 AMQ Core Protocol JMS Client 사용 설명서의 흐름 제어 옵션을 참조하십시오.

transformer-ref

변환기 구성의 이름입니다. 페더레이션 메시지 전송 중에 메시지를 변환하려면 변환기 구성을 추가할 수 있습니다. Transformer 구성은 이 절차의 뒷부분에서 설명합니다.

  1. &lt ;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 로 끝나는 모든 큐는 제외됩니다. 이는 특정 대기열이 로컬 큐로 유지되고 페더레이션되지 않음을 나타냅니다.

  1. 페더레이션 요소 내에서 사용자 지정 변환기 구현을 참조하는 변환기 요소를 추가합니다. 예를 들면 다음과 같습니다.

    <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 인터페이스를 구현하는 사용자 정의 클래스의 이름입니다.

변환기의 transform() 메서드는 메시지가 전송되기 전에 메시지와 함께 호출됩니다. 이렇게 하면 메시지 헤더 또는 본문이 페더레이션되기 전에 변환될 수 있습니다.

속성

특정 변환기 구성에 대해 키-값 쌍을 보유하는 데 사용됩니다.

  1. 페더레이션 요소 내에서 하나 이상의 업스트림 요소를 추가합니다. 각 업스트림 요소는 업스트림 브로커 연결과 해당 연결에 적용할 정책을 정의합니다. 예를 들면 다음과 같습니다.

    <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 요소 목록이 포함되어 있습니다. 커넥터는 발신 연결에 사용할 전송(TCP, SSL, HTTP 등) 및 서버 연결 매개 변수(호스트, 포트 등)를 정의합니다. 이 절차의 다음 단계에서는 페더레이션 큐 구성의 static-connectors 요소에서 참조하는 커넥터를 추가하는 방법을 보여줍니다.
    policy-ref
    업스트림 브로커에 적용되는 다운스트림 브로커에 구성된 대기열 정책의 이름입니다.

    업스트림 요소에 대해 지정할 수 있는 추가 옵션은 다음과 같습니다.

name
업스트림 브로커 구성의 이름입니다. 이 예에서 이름은 eu-east-1eu-west-1 이라는 업스트림 브로커에 해당합니다.
user
업스트림 브로커에 대한 연결을 생성할 때 사용할 사용자 이름입니다. 지정하지 않으면 페더레이션 요소의 구성에 지정된 공유 사용자 이름이 사용됩니다.
암호
업스트림 브로커에 대한 연결을 생성할 때 사용할 암호입니다. 지정하지 않으면 페더레이션 요소의 구성에 지정된 공유 암호가 사용됩니다.
call-failover-timeout
call-timeout 과 유사하지만 페일오버 시도 중에 호출이 수행될 때 사용됩니다. 기본값은 -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
업스트림 브로커에 대한 연결에 high availability가 활성화되어 있는지 여부를 지정합니다. 이 매개변수의 값이 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입니다.

  1. 로컬 브로커에서 원격 브로커에 커넥터를 추가합니다. 이러한 커넥터는 페더레이션 주소 구성의 정적 연결 요소에서 참조됩니다. 예를 들면 다음과 같습니다.

    <connectors>
       <connector name="eu-west-1-connector">tcp://localhost:61616</connector>
       <connector name="eu-east-1-connector">tcp://localhost:61617</connector>
    </connectors>

4.22.9. 다운스트림 대기열 페더레이션 구성

다음 예제에서는 다운스트림 대기열 페더레이션을 구성하는 방법을 보여줍니다.

다운스트림 큐 페더레이션을 사용하면 하나 이상의 원격 브로커가 로컬 브로커에 다시 연결하는 데 사용하는 로컬 브로커에 구성을 추가할 수 있습니다. 이 접근 방식의 장점은 모든 페더레이션 구성을 단일 브로커에 유지할 수 있다는 점입니다. 예를 들어 hub-and-spoke 토폴로지에 유용한 접근 방식이 될 수 있습니다.

참고

다운스트림 대기열 페더레이션은 페더레이션 연결의 방향과 업스트림 대기열 구성을 되돌립니다. 따라서 구성에 원격 브로커를 추가하면 다운스트림 브로커로 간주됩니다. 다운스트림 브로커는 구성의 연결 정보를 사용하여 이제 업스트림으로 간주되는 로컬 브로커에 다시 연결합니다. 이 내용은 원격 브로커에 대한 구성을 추가할 때 이 예의 뒷부분에 설명되어 있습니다.

사전 요구 사항

절차

  1. &lt ;broker_instance_dir&gt; /etc/broker.xml 구성 파일을 엽니다.
  2. < federation> 요소를 포함하는 < federations > 요소를 추가합니다. 예를 들면 다음과 같습니다.

    <federations>
      <federation name="eu-north-1" user="federation_username" password="32a10275cf4ab4e9">
      </federation>
    </federations>
  3. 큐 정책 구성을 추가합니다. 예를 들면 다음과 같습니다.

    <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>
  4. 전송 전에 메시지를 변환하려면 변환기 구성을 추가합니다. 예를 들면 다음과 같습니다.

    <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.foo.NewsTransformer</class-name>
                <property key="key1" value="value1"/>
                <property key="key2" value="value2"/>
            </transformer>
    
        </federation>
      ...
    </federations>
  5. 각 원격 브로커에 대해 downstream 요소를 추가합니다. 예를 들면 다음과 같습니다.

    <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>
                <transport-connector-ref>netty-connector</transport-connector-ref>
                <policy ref="news-address-federation"/>
            </downstream>
    
            <downstream name="eu-west-1" >
                <static-connectors>
                    <connector-ref>eu-west-connector1</connector-ref>
                </static-connectors>
                <transport-connector-ref>netty-connector</transport-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.foo.NewsTransformer</class-name>
                <property key="key1" value="value1"/>
                <property key="key2" value="value2"/>
            </transformer>
    
        </federation>
      ...
    </federations>

    이전 구성에 표시된 대로 원격 브로커는 이제 로컬 브로커의 다운스트림으로 간주됩니다. 다운스트림 브로커는 구성의 연결 정보를 사용하여 로컬(즉, 업스트림) 브로커에 다시 연결합니다.

  6. 로컬 브로커에서 로컬 및 원격 브로커가 사용하는 커넥터 및 어셉터를 추가하여 페더레이션 연결을 설정합니다. 예를 들면 다음과 같습니다.

    <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"
    로컬 브로커의 어셉터는 원격 브로커가 로컬 브로커에 다시 연결하는 데 사용하는 커넥터에 해당합니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.