2015-01-17 3 views
1

.NET RabbitMQ Client 라이브러리를 사용하고 있습니다. 메시징 시스템을 개발하고 싶습니다. 이를 위해 RabbitMQ에 필요한 모든 메소드를 구현했습니다. 또한 큐를 삭제하기 위해 dispose()을 개발했습니다. FormClosing 이벤트에서이 메서드를 호출하므로 사용자가 닫기 단추를 클릭하여 응용 프로그램을 닫고 논리 큐가 삭제 될 때이 메서드가 트리거됩니다. 이것까지 모든 코드가 완벽하게 작동합니다.응용 프로그램이 비정상적으로 닫히면 RabbitMQ 대기열을 삭제하십시오.

하지만 내 문제가

내가 닫기 버튼을 클릭하지 않고 응용 프로그램 을 닫는 시간에 대기열을 삭제할 수 아니에요입니다 (그냥 작업 관리자에서 또는 명령 프롬프트에서 응용 프로그램 을 닫는 가정 해 봅시다 taskkill 명령을 사용하거나 어떤 비정상적으로)이 dispose()가 트리거되지 않기 때문에. 현재 관리 포털에서 수동으로 삭제하기 전까지는 대기열이 삭제되지 않습니다.

그래서 제 질문은

어떻게 응용 프로그램이 닫혀 있는지 알 수 있으며, 그 고아 큐 가 삭제 될 수있다?

+2

그것을위한 옵션입니다 (최종 소비자 구독 취소 때 큐 삭제) 자동 삭제 너는 열렬한 대기열을 가지고 있느냐? – pinepain

+0

감사. @ zaq178miami – Pritam

답변

3

RabbitMQ는 대기열 생성/삭제를 처리 할 수있는 REST 기반 관리 API를 제공합니다.

예기치 않은 종료로 인해 대기열이 버려 졌는지 확인하기 위해 시작시 관리 API를 응용 프로그램 쿼리에 요청하거나이를 수행 할 책임이 완전히 다른 서비스를 가질 수 있습니다 (설계 선택).

당신은 EasyNetQ Management API를 통해 관리 API를 조회 할 수 있습니다

managementClient.DeleteQueue(queue); 

당신은 전체 설명서 here를 찾을 수 있습니다.

편집 :

일부 독서를 수행 한 후, 아마도 독점 또는 자동 삭제 대기열이 충분?

독점 (즉, 연결이 닫힐 때 하나의 연결 만 큐에 의해 사용이 삭제됩니다)

+0

답장을 보내 주셔서 감사합니다. 모든 대기열을 동적으로 생성합니다. 그래서 어떤 큐가 고아로 남았는지 알 수 없습니다. RabbitMQ의 객체가 범위를 벗어날 때 이것을 구현해야합니다. 다시 당신의 도움과 노력에 감사드립니다. – Pritam

+0

작성한 대기열을 추적하여 나중에 확인할 수있는 것은 어떨까요? –

+0

클라이언트의 오버 헤드가 증가합니다. 그래서 나는 추적 할 수 없다. – Pritam

관련 문제