2016-12-28 26 views
0

我有兩個不同的應用程序通過爲兩個應用程序中的每一個創建AppDomain在同一進程上運行。總線設置爲應用程序1是這樣的:MassTransit在兩個不同的應用程序在同一進程上運行的內存設置

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看起來像這樣:

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(); 

當我從應用1將消息發送到應用程序2,應用2不接收它。

從masstransit文檔看來,除了接收端點外,我們不需要在內存中運行時指定其他任何東西。

我在設置中做錯了什麼?即運行內存時,目標網址是否重要。 我是否必須在應用程序2中指定消費者?

任何幫助,將不勝感激。(使用masstransit版本3.4.1)

回答

0

獨立應用程序域具有單獨的內存空間,因此無法共享相同的傳輸。因此,您不能使用InMemoryTransport進行AppDomain之間的通信。相信我,如果可以的話,它會很棒,但是你不能。

爲什麼你仍然使用兩個單獨的AppDomain?如果您可以將它合併到一個域中,它將按預期工作。

+0

我們正試圖在內存中執行驗收測試的運行。因此,我們的使用規範流程的驗收測試項目爲每個應用程序(即api控制檯主機,應用程序控制臺主機)初始化不同的應用程序域,以便不同的應用程序可以在同一進程上運行,因此只是爲了端到端測試。 – sagar

相關問題