2016-12-28 5 views
0

두 응용 프로그램 각각에 대해 AppDomain을 작성하여 동일한 프로세스에서 실행되는 두 개의 서로 다른 응용 프로그램이 있습니다. 응용 프로그램 1에 대한 버스 설정은 다음과 같습니다 : 나는 응용 프로그램 2 프로그램 1에서 메시지를 보낼 때MassTransit 동일한 프로세스에서 실행중인 두 개의 다른 응용 프로그램에 대한 메모리 설정에서

builder.Register(c => 
      { 
       var inMemoryTransportCache = new InMemoryTransportCache(Environment.ProcessorCount); 
       var bus = Bus.Factory.CreateUsingInMemory(sbc => 
       { 
        sbc.ReceiveEndpoint("TestQueue", ce => 
        { 
         ce.LoadFrom(c); 
        }); 
        sbc.SetTransportProvider(inMemoryTransportCache); 
       }); 

       return bus; 
      }) 
       .As<IBusControl>() 
       .As<IBus>() 
       .SingleInstance(); 

      builder.Register(c => c.Resolve<IBusControl>().GetSendEndpoint(
       new Uri("destinationUrl")).Result) 
       .As<ISendEndpoint>() 
       .SingleInstance(); 

, 응용 프로그램이 그것을받지 않습니다

builder.Register(c => 
      { 
       var inMemoryTransportCache = new InMemoryTransportCache(Environment.ProcessorCount); 
       var bus = Bus.Factory.CreateUsingInMemory(sbc => 
       { 
        sbc.SetTransportProvider(inMemoryTransportCache); 
       }); 
       return bus.GetSendEndpoint(new Uri(busDestination)).Result; 
      }).As<ISendEndpoint>(); 

응용 프로그램 2의 버스 설정은 다음과 같습니다 .

masstransit 문서에서 수신 끝점 이외의 모양으로 보입니다. 메모리에서 실행할 때 다른 것을 지정할 필요가 없습니다.

설치에 문제가 있습니까? 즉, 메모리 내에서 실행될 때 대상 URL이 중요합니다. application2에서도 소비자를 지정해야합니까?

은 어떤 도움이 많이 주시면 감사하겠습니다.

답변

0

별도의 응용 프로그램 도메인은 별도의 메모리 공간을 가지고, 따라서 동일한 전송을 공유 할 수 없습니다 (masstransit 버전 3.4.1을 사용하여). 따라서 AppDomain 간 통신을 위해 InMemoryTransport를 사용할 수 없습니다. 저를 믿으십시오. 할 수 있다면 정말 좋겠지 만 할 수는 없습니다.

어쨌든 왜 두 개의 별도 AppDomains를 사용하고 있습니까? 단일 도메인으로 축소 할 수 있으면 예상대로 작동합니다.

+0

우리는 메모리에서 수용 테스트 실행을 구현하려고합니다. 따라서 사양 흐름을 사용하는 수용 테스트 프로젝트는 API 콘솔 호스트, 애플리케이션 콘솔 호스트와 같이 각기 다른 애플리케이션 도메인을 초기화하므로 서로 다른 애플리케이션을 동일한 프로세스에서 실행할 수 있으므로 인 메모리 버스를 활용할 수 있습니다. 엔드 투 엔드 테스트. – sagar