2012-04-16 6 views
0

QPID AMQPAMQP의 네트워크 트래픽 QPID

네트워크 트래픽 퇴출에 관한 질문이 있습니다. 기계 A에 게시자가 있다고 가정합니다. Qpid 브로커가 시스템 B에서 실행 중입니다. 우리는 두 명의 구독자 Machine C와 Machine D (둘 다 동일한 주제를 구독 함)를 가지고 있습니다. 이제 토폴로지를 상상해보십시오
A -> B -> X -> C | D (게시자 A는 B에 연결되고 구독자 C와 D는 브로커와 중간 노드 X를 통해 연결됨) C 및 D에 대한 주제와 일치하는 A로 게시 된 메시지는 둘 모두에 의해 수신됩니다. 원하는 대상 알아두면 가장자리 b-> x는 메시지를 두 번 전달합니다 (b-> x-> c 및 b-> x-> c의 두 번째 메시지). 또는 AMQP/qpid 프레임 워크가 B에서 X로 메시지를 한 번 전송 한 다음 각 개별 구독자에게 사본을 보낼만큼 지능적입니다 (따라서 b-> x에서 네트워크 트래픽이 적음). 내가 생각하기에 X는 아무 것도 모르기 때문에 각 구독자에 대해 개인 구독 큐가있을 경우 (또는 공유 대기열 및 소비 대신 메시지를 탐색/복사하는 경우에도) 메시지는 b-> x를 통해 두 번 이동합니다.

이 질문은 QPID와 관련이 없습니다. 다른 Broker 기반 (RabbitMQ) 및 브로커없는 메시징 프레임 워크 (Zero MQ, LBM/UMS)에 대한 솔루션을 알고 싶습니다. 나는 제로 MQ가 더 똑똑한 솔루션을 제공하려고 시도했다. http://www.250bpm.com/pubsub#toc4,하지만 중급 홉은 여러 복사본을 보낼지 여부를 알기 때문에 복잡해 보였다. (나는 네트워킹 전문가가 아니기 때문에 무언가를 obvoius라고 할 수있다.

답변

1

X는 'federation'기능을 통해 B에 연결된 또 다른 Qpid 브로커라고 가정합니다. 이 경우 메시지는 B에서 X로 두 번 전송되지 않습니다.

시나리오의 다른 요구 사항에 따라이 방법을 구성 할 수 있습니다.

첫 번째는 정적으로 X를 B에 연결하는 것입니다. 구독 할 X에서 B에 대한 대기열을 만들고 해당 Q를 해당 교환기에 바인딩하여 C와 D 모두에 대한 메시지가 일치하도록 한 다음 qpid-route를 사용합니다 그 대기열에서 X의 교환기로 연결되는 브릿지를 만듭니다. 이제 C와 D는 X에서 해당 교환기에 연결하고 바인드하며 예상대로 A가 게시 한 메시지를 수신합니다. 이 경우 메시지는 항상 C 또는 D의 활성 여부에 관계없이 B에서 X로 흐릅니다. 다른 소비자 인 E를 추가하는 경우 B의 고정 큐에 바인딩을 정적으로 추가해야 할 수 있습니다.

두 번째 옵션은 동적 라우팅을 사용하는 것입니다. 이렇게하면 X에서 B 로의 바인딩 정보 전파가 자동으로 처리되어 X에서 활성 바인딩이 필요한 경우 메시지가 B에서 X로만 흐릅니다.

+0

나는 연합에 대해 알고있다. 기본적으로 경로를 만들고 메시지를 구독 할 수있다. 내 질문은 X가 임의의 qpid 메시지 또는 브로커에 대해 전혀 알지 못하는 네트워크 토폴로지의 임의의 홉이라면 무엇인가에 관한 것입니다. 이것은 단지 중간 홉일뿐입니다. 그러면 X는 같은 메시지를 두 번 봅니다 (한 번 C로 전달하고 D로 한 번 전달). – user179156

0

RabbitMQ는 중간 링크를 통해서만 메시지를 전파합니다 한 번만 (일부 다운 스트림 소비자가 실제로 메시지를 보게 될 경우에만 전송됩니다).

+0

RabbitMQ를 알지만 무슨 말을하는지 모르겠습니다. 메시지가 전송되지 않을 대기열이 없다면 당신이 가정합니다. ... OP의 질문을 신중하게 읽은 후 편집하십시오. –

+0

당신은 무작위 노드 x (어떤 브로커도 아니고 단지 토폴로지의 무작위 홉임)를 의미합니다. 구독 메시지는 단 한번만 전송됩니까? 그렇다면 무작위 노드 x는 C 및 D의 다운 스트림 사본에 보내야한다는 것을 어떻게 알 수 있습니까? 브로커 기반 미들웨어에서이 기능이 네트워크 토폴로지에 대해 영리하도록 설계된 방법은 무엇입니까?이런 종류의 C 및 D에 대해 두 개의 구독 대기열을 사용하면 브로커에서 메시지의 복사본이 중복되는 경우가 있습니다. 단 하나의 메시지 만 X에서 복제되거나 노드 X로 전송되는 경우 (어떤 메시지도 전혀 모르는 경우) 기존 메시징 미들웨어). – user179156

관련 문제