12.2. 링크 경로 생성
링크 경로는 발신자와 라우터가 엔드 포인트 간에 메시지를 전달하는 수신자 간의 개인 메시징 경로를 나타냅니다. 클라이언트를 서비스에 연결하는 데 사용할 수 있습니다(예: 브로커 큐).
12.2.1. 링크 라우팅 이해
링크 라우팅은 브로커링 메시징에 대한 대체 전략을 제공합니다. 링크 경로는 발신자와 라우터가 엔드 포인트 간에 메시지를 전달하는 수신자 간의 개인 메시징 경로를 나타냅니다. 링크 경로는 라우터 네트워크를 통해 발신자에서 수신자로 이동하는 "가상 연결" 또는 "tunnel"으로 생각할 수 있습니다.
링크 라우팅을 사용하면 라우팅이 링크 연결 프레임에서 수행되며, 이 프레임은 함께 연결되어 발신자와 수신자를 직접 연결하는 가상 메시징 경로를 형성합니다. 링크 경로가 설정되면 메시지 전달, 흐름 프레임 및 배치가 링크 경로에서 수행됩니다.
12.2.1.1. 링크 라우팅 흐름 제어
메시지 라우팅과 달리, 링크 라우팅과 함께 발신자 및 수신자는 직접 흐름 제어를 처리합니다. 수신자는 수신 가능한 메시지 수인 링크 단위를 부여합니다. 라우터는 이를 발신자에게 직접 보낸 다음 수신자가 부여한 단위를 기반으로 메시지를 보냅니다.
12.2.1.2. 링크 경로 주소
링크 경로 주소는 브로커 큐, 주제 또는 기타 서비스를 나타냅니다. 클라이언트에서 링크 경로 주소를 라우터에 연결하면 라우터는 주소로 식별되는 브로커 리소스에 링크 첨부 파일을 전달합니다.
링크 경로 주소를 사용하여 라우터 네트워크는 집계된 메시지 배포에 참여하지 않습니다. 라우터는 단순히 두 끝점 사이에 메시지 전달 및 해제를 전달합니다.
12.2.1.3. 링크 라우팅의 라우팅 패턴
발신자와 수신자 사이에 직접 링크가 있으므로 라우팅 패턴은 링크 라우팅과 함께 사용되지 않습니다. 라우터는 초기 link-attach 요청 프레임을 수신할 때만 라우팅 결정을 내립니다. 링크가 설정되면 라우터는 균형 잡힌 배포의 링크를 통해 메시지를 전달합니다.
12.2.2. 링크 경로 생성
링크 경로는 라우터를 통해 이동하는 발신자와 수신자 간의 링크를 설정합니다. 라우터에서 클라이언트로부터 링크-연결을 수신하고 특정 대상으로 보낼 수 있도록 내부 및 외부 링크 경로를 구성할 수 있습니다.
링크 라우팅을 사용하면 라우터가 아닌 브로커에서 클라이언트 트래픽이 처리됩니다. 클라이언트는 라우터를 브로커 큐로 직접 연결할 수 있습니다. 따라서 각 클라이언트는 별도의 생산자 또는 소비자입니다.
브로커 연결에 실패하면 라우팅된 링크가 분리되고 라우터는 브로커(또는 해당 백업)에 다시 연결을 시도합니다. 연결이 재설정되면 브로커에 대한 링크 경로에 다시 연결할 수 있습니다.
클라이언트 관점에서 클라이언트는 분리된 링크(즉, 발신자 또는 수신자)를 볼 수 있지만 실패한 연결은 볼 수 없습니다. 따라서 클라이언트가 브로커 연결 실패 시 드롭된 링크를 다시 연결하도록 하려면 클라이언트에서 이 기능을 구성해야 합니다. 또는 링크 라우팅 대신 autolinks와 함께 메시지 라우팅을 사용할 수 있습니다. 자세한 내용은 12.1.4.2절. “브로커 큐를 통해 메시지 라우팅”의 내용을 참조하십시오.
절차
해당 연결이 없는 경우 브로커에 발신 연결을 추가합니다.
대기열이 여러 브로커에 걸쳐 분할되는 경우 각 브로커에 대한 연결을 추가해야 합니다. 자세한 내용은 8.3절. “외부 AMQP 컨테이너에 연결”의 내용을 참조하십시오.
클라이언트가 로컬 트랜잭션을 브로커로 보내려면 트랜잭션 조정자를 위한 링크 경로를 생성합니다.
linkRoute { prefix: $coordinator 1 connection: my_broker direction: in }
- 1
$coordinator
접두사는 이 링크 경로를 트랜잭션 조정자로 설정합니다. 클라이언트가 트랜잭션 세션을 열 때 트랜잭션을 시작하고 종료하라는 요청은 이 링크 경로를 따라 브로커로 전파됩니다.
AMQ Interconnect는 여러 브로커에 대한 트랜잭션을 라우팅하지 않습니다. 환경에 여러 브로커가 있는 경우 단일 브로커를 선택하고 모든 트랜잭션을 라우팅하십시오.
클라이언트가 이 링크 경로에서 메시지를 보내려면 수신 링크 경로를 생성합니다.
linkRoute { prefix: my_queue connection: my_broker direction: in ... }
접두사
|패턴
라우팅된 link-attaches의 대상이어야 하는 브로커 큐와 일치하는 주소 접두사 또는 패턴입니다. 이 접두사 또는 패턴과 일치하는 모든 메시지는 링크 경로를 따라 배포됩니다. 주소의 정확한 주소 또는 시작 세그먼트와 일치하도록 접두사를 지정할 수 있습니다. 또는 와일드카드를 사용하여 주소와 일치하는 패턴을 지정할 수 있습니다.
접두사 는 정확한 주소 또는
.
또는/
문자로 구분된 주소 내의 시작 세그먼트와 일치합니다. 예를 들어my_address
접두사는my_address
.1 주소뿐만 아니라my_address.1
과my_address/1
과 일치합니다. 그러나my_address1
과 일치하지 않습니다.패턴은 패턴에 해당하는 주소와 일치합니다. 패턴은
.
또는/
문자로 구분된 일련의 단어입니다. 와일드카드 문자를 사용하여 단어를 나타낼 수 있습니다.*
문자는 정확히 하나의 단어와 일치하며#
문자는 0개 이상의 단어와 일치합니다.*
및#
문자는 와일드카드로 예약되어 있습니다. 따라서 메시지 주소에 사용해서는 안 됩니다.주소 패턴 생성에 대한 자세한 내용은 12.1.5절. “주소 패턴 일치” 을 참조하십시오.
참고/#
을 추가하여접두사
값을패턴으로
변환할 수 있습니다. 예를 들어a/b/c
접두사는a/b/c/#
패턴과 동일합니다.connection
|containerID
라우터가 브로커에 연결하는 방법 발신 연결(
연결
) 또는 브로커의 컨테이너 ID(containerID
)를 지정할 수 있습니다.이 연결을 통해 여러 브로커가 라우터에 연결된 경우 링크 경로의 접두사 또는 패턴과 일치하는 주소에 대한 요청이 브로커 전체에 분산됩니다. 또는 특정 브로커를 지정하려면
containerID
를 사용하고 브로커의 컨테이너 ID를 추가합니다.direction
-
클라이언트가 이 링크 경로의 라우터 네트워크로 메시지를 보낼 수 있도록 이 속성을
in
으로 설정합니다.
추가 속성에 대한 자세한 내용은
qdrouterd.conf
매뉴얼 페이지의 linkRoute 를 참조하십시오.클라이언트가 이 링크 경로에서 메시지를 수신하도록 하려면 발신 링크 경로를 생성합니다.
linkRoute { prefix: my_queue connection: my_broker direction: out ... }
접두사
|패턴
라우팅된 링크 연결을 수신하려는 브로커 큐와 일치하는 주소 접두사 또는 패턴입니다. 이 접두사 또는 패턴과 일치하는 모든 메시지는 링크 경로를 따라 배포됩니다. 주소의 정확한 주소 또는 시작 세그먼트와 일치하도록 접두사를 지정할 수 있습니다. 또는 와일드카드를 사용하여 주소와 일치하는 패턴을 지정할 수 있습니다.
접두사 는 정확한 주소 또는
.
또는/
문자로 구분된 주소 내의 시작 세그먼트와 일치합니다. 예를 들어my_address
접두사는my_address
.1 주소뿐만 아니라my_address.1
과my_address/1
과 일치합니다. 그러나my_address1
과 일치하지 않습니다.패턴은 패턴에 해당하는 주소와 일치합니다. 패턴은
.
또는/
문자로 구분된 일련의 단어입니다. 와일드카드 문자를 사용하여 단어를 나타낼 수 있습니다.*
문자는 정확히 하나의 단어와 일치하며#
문자는 0개 이상의 단어와 일치합니다.*
및#
문자는 와일드카드로 예약되어 있습니다. 따라서 메시지 주소에 사용해서는 안 됩니다.주소 패턴 생성에 대한 자세한 내용은 12.1.5절. “주소 패턴 일치” 을 참조하십시오.
참고/#
을 추가하여접두사
값을패턴으로
변환할 수 있습니다. 예를 들어a/b/c
접두사는a/b/c/#
패턴과 동일합니다.connection
|containerID
라우터가 브로커에 연결하는 방법 발신 연결(
연결
) 또는 브로커의 컨테이너 ID(containerID
)를 지정할 수 있습니다.이 연결을 통해 여러 브로커가 라우터에 연결된 경우 링크 경로의 접두사 또는 패턴과 일치하는 주소에 대한 요청이 브로커 전체에 분산됩니다. 또는 특정 브로커를 지정하려면
containerID
를 사용하고 브로커의 컨테이너 ID를 추가합니다.direction
-
이 링크 경로가 수신자임을 지정하려면 이 속성을
out
으로 설정합니다.
추가 속성에 대한 자세한 내용은
qdrouterd.conf
매뉴얼 페이지의 linkRoute 를 참조하십시오.
12.2.3. 링크 경로 예: 다른 네트워크에서 클라이언트 및 브로커 연결
이 예제에서는 링크 경로에서 다른 사설 네트워크에 있는 메시지 브로커에 클라이언트를 연결하는 방법을 보여줍니다.
그림 12.6. 격리된 클라이언트가 있는 라우터 네트워크
클라이언트는 자체 네트워크(R
3)의 라우터에 연결하도록 방화벽 정책에 의해 제한됩니다. 그러나 링크 경로를 사용하여 다른 네트워크에 있는 경우에도 메시지 브로커 B1
및 B2
에서 제공되는 큐, 주제 및 기타 AMQP 서비스에 액세스할 수 있습니다.
이 예에서 클라이언트는 Private Network 1
의 브로커 B2
에서 호스팅되는 b2.event-queue
에서 메시지를 수신해야 합니다. 링크 경로는 클라이언트와 브로커를 연결하지만 그 사이에 라우터 네트워크가 있음을 인식하지 못합니다.
라우터 구성
클라이언트가 브로커 B2
의 b2.event-queue
에서 메시지를 수신할 수 있도록 하려면 라우터 R2
가 다음을 수행할 수 있어야 합니다.
-
브로커
B2
에 연결 -
브로커
B2
에 대한 경로 링크 -
라우터 네트워크에
b2.event-queue
주소가 있는 링크의 유효한 대상으로 알립니다.
R2
라우터의 구성 파일의 관련 부분은 다음을 보여줍니다.
connector { 1 name: broker role: route-container host: 192.0.2.1 port: 61617 saslMechanisms: ANONYMOUS } linkRoute { 2 prefix: b2 direction: in connection: broker } linkRoute { 3 prefix: b2 direction: out connection: broker }
이 구성을 사용하면 라우터 R2
가 b2
로 시작하는 대상 및 소스의 유효한 대상으로 자신을 알릴 수 있습니다. 또한 라우터는 B2
브로커에 연결하고 b2
접두사로 시작하는 큐에 대한 링크를 라우팅할 수 있습니다.
R1
라우터와 R3
라우터도 동일한 구성을 사용해야 합니다.
클라이언트가 메시지를 수신하는 방법
구성된 링크 경로를 사용하여 클라이언트는 서로 다른 네트워크에 있는 경우에도 브로커 B2
에서 메시지를 수신할 수 있습니다.
라우터 R2
는 브로커 B2
에 연결을 설정합니다. 연결이 열려 있으면 R2
는 다른 라우터(R1
및 R
3)에 b2
접두사로 라우팅하는 데 유효한 대상임을 알립니다. 즉, R1
또는 R3
에 연결된 발신자 및 수신자 링크가 R2
에 대한 가장 짧은 경로를 따라 라우팅되고 브로커 B2
로 라우팅됩니다.
브로커 B2
의 b2.event-queue
에서 메시지를 수신하기 위해 클라이언트는 소스 주소가 b2.event-queue
인 수신자 링크를 로컬 라우터 R3
에 연결합니다. 주소가 b2
접두사와 일치하므로 R3
는 링크를 R1
로 라우팅합니다. 이 링크는 대상 경로의 다음 홉입니다. R1
은 R2
로 링크를 라우팅하여 B2
브로커로 라우팅합니다. 이제 클라이언트는 수신자가 설정되었으며 메시지 수신을 시작할 수 있습니다.
어떤 이유로든 브로커 B2
를 사용할 수 없는 경우 라우터 R2
는 B 2
주소의 대상으로 자신을 알리지 않습니다. 이 경우 라우터 R1
및 R3
는 대상에 사용 가능한 경로가 없음을 나타내는 오류 메시지와 함께 브로커 B2
로 라우팅해야 하는 링크 연결을 거부합니다.