2013-03-20 3 views
1

autodelete:yes을 통해 교환기에 연결된 일부 클라이언트가 있습니다. 이들은 모두 게시자와 소비자입니다. 그러나 기본적으로 지금은 그들이 메시지를 퍼블리싱한다고 가정합시다. 각 클라이언트는 고유 한 바인딩 키를 가지고 있기 때문에 이러한 컴퓨터를 사용하는 컴퓨터의 각 메시지에 명시적인 작업을 수행 할 수 있습니다. 모든 것이 잘 작동합니다.rabbitmq에서 큐가 삭제 될 때 고객에게 알립니다.

이제 클라이언트가 충돌하거나 수동으로 (SIGINT, ctrl + c를 통해) 종료하면 대기열이 삭제됩니다. 대기열이 삭제 된 원격 시스템의 사용자가 알 수있는 방법이 있습니까?

클라이언트 응용 프로그램에서 신호 처리기를 만들려고합니다. 따라서 SIGINT 또는 SIGTERM을 잡을 때마다 원격 소비자에게 알립니다 (고유 한 ID는 삭제 될 것입니다)

다른 방법이 있습니까, 아니면 내 방식이 올바른 방법입니까?

+0

설명해 주시겠습니까? 대기열이 삭제되면 해당 대기열과 함께 삭제되며 해당 채널은 닫힙니다. 따라서 통보 할 소비자가 없어야합니다. – theMayer

+0

내용을 분명히하겠습니다. 기본적으로 소비자와 나는 나의 고객이 출판하고있는 교환기에서 소비하는 원격 기계를 의미했습니다. –

+0

팬 아웃 또는 주제 교환을 사용하고 있습니까? 토폴로지를 보여주는 다이어그램을 제공하는 것이 좋다고 생각합니다. 어디에서 누가 누가 어디에서 소비하는지 공개하지는 않기 때문입니다. – theMayer

답변

1

일반적으로 메시징에서 소모하는 응용 프로그램은 응용 프로그램을 생성하는 상태를 신경 쓰지 않습니다.

RabbitMQ에서 응용 프로그램을 만드는 데는 두 가지 방법 중 하나를 사용하여 응용 프로그램의 상태를 알 수 있습니다. 첫 번째 (선호하는) 방법은 Dead-Letter Exchange (dlx)입니다. 메시지를 전달할 수없는 경우 (대상 대기열이 존재하지 않기 때문에) 여기에서 라우팅되며 응용 프로그램은 DLX에 구성된 대기열에서 메시지를 가져 와서 대상에 도달하지 않았는지 파악합니다 .

두 번째 방법은 메시지에 Mandatory 플래그를 설정하는 것입니다. 이렇게하면 대상 대기열이 더 이상 존재하지 않는 경우 브로커가 Basic.Return 메소드를 통해 생성 응용 프로그램에 메시지를 바로 보냅니다.

위의 항목이 필요에 맞지 않으면 응용 프로그램을 설계 할 수있는 더 좋은 방법이 있으므로 아키텍처를 다소 재검토하고 싶을 수 있습니다.

+0

즉시 메시지가 의미가 있습니다. 그것을 알아 줘서 고마워. 나는 그것을 시도하고 나의 결과로 다시 말하기. –

+0

내 잘못, 나는 Mandatory라고 써야했다. – theMayer

관련 문제