2014-02-26 3 views
0

캐슬 윈저 통합을 RabbitMQ 이상의 대중 교통을 위해 사용할 수 없습니다. 윈저를 사진에 소개하기 전까지는 모든 것이 잘 작동했습니다. Castle.Windsor 3.2 및 MassTransit.WindsorIntegration 2.9를 참조하고 응용 프로그램 내에서 사용할 수 있도록 컨테이너를 구성했습니다. 내가 통해 MassTransit 소비자를 등록 해요 : 내가 디버깅이 라인이 실행 된 후 컨테이너를 검사 할 때MassTransit Windsor 통합을 사용할 때 결코 소비자가 호출하지 않습니다.

Container.Register(..., Types.FromThisAssembly().BasedOn<IConsumer>()); 

, 나는 성공적으로 내 다른 모든 구성 요소와 함께 소비자의 모든 등록 된 것을 볼 수 있습니다.

var serviceBus = ServiceBusFactory.New(sbc => 
{ 
    sbc.UseRabbitMq(); 
    sbc.ReceiveFrom(Config.ServiceBusEndpoint); 
    sbc.Subscribe(sc => sc.LoadFrom(Container)); 
}); 

Container.Register(Component.For<IServiceBus>().Instance(serviceBus)); 

내가 MassTransit.WindsorIntegration에서 제공하는 LoadFrom(IWindsorContainer container) 확장 방법을 사용하고 있습니다 : 그때 초기화하고 서비스 버스를 등록하려면 다음 코드가 있습니다.

내가 지금까지 발견 한 모든 사례는 여기에서 멈추고 이것이 모두해야만한다는 것을 나타냅니다. 불행히도 저를 위해 나의 소비자는 결코 불리지 않으며 메시지는 대기열에서 다만 위로 쌓고있다 (결국 밖으로 타임 아웃하고 오류 대기열에가는). 소비자 대기열에 메시지가 전혀 표시되지 않는다는 사실 (+ RabbitMQ 관리 도구를 통해 대기열에 묶인 단일 사용자가 있음)이 나에게 소비자가 제대로 구독 중임을 나타냅니다. 문제가있다.

Windsor 및 MassTransit에 대해 NLog 로깅을 추가했지만 로그에 오류가 표시되지 않습니다. 이 시점에서 어떻게 문제 해결을 진행해야하는지 잘 모르겠습니다. 어떤 아이디어?

또한이 응용 프로그램은 현재 개발 용 Topshelf를 사용하는 콘솔 응용 프로그램입니다. 궁극적으로 Windows 서비스로 설치됩니다. 그게 관련이 있든 그렇지 않든 나는 잘 모르겠다. 테스트 용으로

UPDATE I는 매우 간단한 테스트 메시지를 처리하기위한 파라미터가없는 생성자 매우 간단한 소비자를 만들었다. 이 소비자는 성공적으로 호출되었습니다! "진짜"소비자들은 생성자를 통해 그들에게 주입 될 필요가있는 의존성을 가지고있다. 나는 컨테이너가 이것들을 해결하기를 바랐다. 그러나 분명히 어떤 종류의 문제가있다. 이상한 점은 아무 것도 로그에 기록되지 않는다는 것입니다. 계속 지켜봐주십시오 ...

답변

1

알았어요. 알아 냈습니다. 어딘가에 NuGet 패키지를 추가/제거 할 때 필자는 필자가 필요로하는 구성 요소 중 하나 인 RedisClientsManager (DLL) (ServiceStack.Text.dll)에 대한 참조를 삭제할 수있었습니다.

나는, 내 모든 구성 요소는 다음 등록 직접 실행 창 깨져하자 디버거를 시작하고 각 구성 요소 하나 하나를 해결하기 위해 시도 (container.Resolve <를 호출하여 RegisteredType>()) 내가 하나를 찾을 때까지 문제를 해결하려고 시도 할 때 예외가 발생했습니다.

그 시점에서 윈저의 예외 메시지에 문제가 무엇인지 정확히 알려주었습니다. 컨테이너 자체가 문제를 해결하려고 시도했을 때 예외가 발생하지 않은 이유는 여기에 기록되지 않은 이유입니다. 어쨌든, 이야기의 도덕은 구성 요소가 해결되는지 확인하는 것입니다.

관련 문제