2016-11-01 3 views
1

RabbitMQ에서 연결을 끊고 EasyNetQ를 사용하여 다시 연결해야하는 상황에 있습니다. 필자는 문서에 설명 된대로 IBus를 삭제하여이 작업을 수행합니다.EasyNetQ를 사용하여 RabbitMQ를 분리 한 다음 다시 연결하는 방법은 무엇입니까?

https://github.com/EasyNetQ/EasyNetQ/wiki/connecting-to-rabbitmq

는 "이것은 연결, 채널, 소비자와 EasyNetQ에서 사용하는 다른 모든 자원을 닫습니다 ... 단순히 버스를 폐기 연결을 닫습니다."

그러나 새 버스를 만들기 위해 전화를 걸면 여전히 연결이 끊긴 상태로 표시됩니다.

bus = RabbitHutch.CreateBus(connString); 
bus.Dispose(); 
resolver.EasyNetQKernel.Release(bus); 
bus = RabbitHutch.CreateBus(connString); 
bus.Receive<Command>("CommandQueue"), Process); 

이 시점에서 소비자를 재설정하려고하면 "버스가 처리되었습니다."라는 메시지와 함께 EasyNetQException이 발생합니다.

왜 버스를 처분 한 후 다시 만들 수 없습니까?

+0

저는 이것이 EasyNetQ의 IoC 컨테이너에서 싱글 톤이되는 IBus와 관련이 있다고 가정합니다. –

+0

'소비자 리셋'이란 무엇입니까? 새 구독을 만드시겠습니까? 코드를 보여줄 수 있습니까? 어떤 IOC를 사용하고 있습니까, 당신은 컨테이너를 폐기하고 있습니까? –

+0

예, 이전 버전을 사용하지 말고, 새로운 프리 페치 횟수를 사용하여 새로 작성하십시오. ninject를 사용 중이고 resolver.EasyNetQKernel.Release (버스)를 호출 해 보았습니다. after bus.Dispose(); 이것이 내가 IBus를 재현 할 수 있다고 생각했으나, 여전히 같은 상태에 있으며, 버스로 새로운 "구독"을 만들지 못하게 할 것이다. 수신(); –

답변

0

나는 Ninject를 사용하지 않았지만 버스 인스턴스 대신 전체 Ninject 컨테이너를 처분하고 다시 만들 수 있습니까? 컨테이너가 이미 폐기 된 오래된 참조를 붙잡고 있다고 생각합니다.