MassTransit在内存设置中,用于在同一进程上运行的两个不同应用程序

时间:2016-12-28 17:11:11

标签: masstransit

通过为两个应用程序中的每个应用程序创建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)

1 个答案:

答案 0 :(得分:0)

单独的AppDomains具有单独的内存空间,因此无法共享相同的传输。因此,您无法使用InMemoryTransport进行AppDomain间通信。相信我,如果可以的话会很棒,但你不能。

为什么要使用两个单独的AppDomain?如果您可以将其折叠到单个域中,它将按预期工作。