通过为两个应用程序中的每个应用程序创建AppDomain,我有两个不同的应用程序在同一进程上运行。 application1的总线设置如下所示:
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>();
application2的总线设置如下所示:
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文档看起来,除了接收端点之外,我们在内存中运行时不必指定任何其他内容。
我在设置中做错了什么?即在内存中运行时目标URL是否重要。 我还必须在application2中指定消费者吗?
非常感谢任何帮助。(使用masstransit版本3.4.1)
答案 0 :(得分:0)
单独的AppDomains具有单独的内存空间,因此无法共享相同的传输。因此,您无法使用InMemoryTransport进行AppDomain间通信。相信我,如果可以的话会很棒,但你不能。
为什么要使用两个单独的AppDomain?如果您可以将其折叠到单个域中,它将按预期工作。