2016-12-28 5 views
0

2つのアプリケーションのそれぞれに対してAppDomainを作成することによって、同じプロセスで実行されている2つの異なるアプリケーションがあります。アプリケーション2のバス設定は次のようになりますMassTransit同じプロセスで実行されている2つの異なるアプリケーションのメモリ設定時

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

:アプリケーション1のバス設定は次のようになり、私はアプリケーション2にアプリケーション1からメッセージを送信すると

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

、アプリケーション2は、それを受信しません。

masstransitのドキュメントからは、受信エンドポイント以外のように見えます。メモリ内で実行しているときは何も指定する必要はありません。

セットアップに何か問題がありますか?つまり、メモリ内で実行されているときに宛先URLの問題が発生します。 application2でもコンシューマを指定する必要がありますか?

すべてのヘルプははるかに高く評価されるだろう。(masstransitバージョン3.4.1を使用して)

答えて

0

別のAppDomainは別のメモリ領域を持っているので、同じトランスポートを共有することはできません。したがって、AppDomain間の通信にInMemoryTransportを使用することはできません。あなたができるなら私を信じて、それは素晴らしいだろうが、することはできません。

どうして2つの別々のAppDomainsを使用していますか?単一のドメインに折り畳むことができれば、期待どおりに動作します。

+0

私たちはメモリ内で受け入れテストの実行を実装しようとしています。だから、仕様フローを使用するアクセプタンステストプロジェクトでは、アプリケーションごとに異なるアプリケーションドメイン、つまり、apiコンソールホスト、アプリケーションコンソールホストが初期化されるため、異なるアプリケーションが同じプロセスで実行され、エンドツーエンドのテスト。 – sagar

関連する問題