MassTransit 的内存总线能否跨进程工作?
Can MassTransit's In-Memory bus work across processes?
我正在试验 MassT运行sit 的内存总线,我尝试修改 Loosely Couple Labs Publish/Subscribe Example 给出的样本,从使用 RabbitMQ 到内存总线。但是,订阅者似乎没有收到消息。
我正在使用 MassT 的 3.1.2 版本运行sit.
在 Publisher 中,我将总线创建更改为:
var bus = Bus.Factory.CreateUsingRabbitMq(x => x.Host(new Uri("rabbitmq://localhost/"), h => { }));
至:
var bus = Bus.Factory.CreateUsingInMemory(x => { });
在订户中,我将总线创建更改为:
var bus = Bus.Factory.CreateUsingRabbitMq(x =>
{
var host = x.Host(new Uri("rabbitmq://localhost/"), h => { });
x.ReceiveEndpoint(host,
"MtPubSubExample_TestSubscriber",
e => e.Consumer<SomethingHappenedConsumer>());
});
至:
var bus = Bus.Factory.CreateUsingInMemory(x => x.ReceiveEndpoint("myQueue",
e => e.Consumer<SomethingHappenedConsumer>()));
当我 运行 此代码时,订户控制台应用程序未收到消息。由于我能够在同一进程中使用环回,这让我相信内存总线不会跨进程工作。这是正确的,还是有办法让内存总线在同一台机器上的不同进程之间进行通信?
in-memory 传输专为在单个进程中使用而设计。无法使用 in-memory 传输在多个进程之间进行通信(即使它们在同一台机器上)。
但是,通过配置传输提供程序,可以在同一进程中与多个总线实例共享相同的in-memory传输。这是在许多单元测试中完成的,以验证跨总线实例的行为。
return MassTransit.Bus.Factory.CreateUsingInMemory(x =>
{
_inMemoryTransportCache = new InMemoryTransportCache(Environment.ProcessorCount);
x.SetTransportProvider(_inMemoryTransportCache);
x.ReceiveEndpoint("input_queue", configurator =>
{
configurator.Handler<MyMessage>(context => {});
});
});
InMemoryTransportCache 可以保存并传递给多个总线实例。同样,这都是 在同一个进程中 。
我正在试验 MassT运行sit 的内存总线,我尝试修改 Loosely Couple Labs Publish/Subscribe Example 给出的样本,从使用 RabbitMQ 到内存总线。但是,订阅者似乎没有收到消息。
我正在使用 MassT 的 3.1.2 版本运行sit.
在 Publisher 中,我将总线创建更改为:
var bus = Bus.Factory.CreateUsingRabbitMq(x => x.Host(new Uri("rabbitmq://localhost/"), h => { }));
至:
var bus = Bus.Factory.CreateUsingInMemory(x => { });
在订户中,我将总线创建更改为:
var bus = Bus.Factory.CreateUsingRabbitMq(x =>
{
var host = x.Host(new Uri("rabbitmq://localhost/"), h => { });
x.ReceiveEndpoint(host,
"MtPubSubExample_TestSubscriber",
e => e.Consumer<SomethingHappenedConsumer>());
});
至:
var bus = Bus.Factory.CreateUsingInMemory(x => x.ReceiveEndpoint("myQueue",
e => e.Consumer<SomethingHappenedConsumer>()));
当我 运行 此代码时,订户控制台应用程序未收到消息。由于我能够在同一进程中使用环回,这让我相信内存总线不会跨进程工作。这是正确的,还是有办法让内存总线在同一台机器上的不同进程之间进行通信?
in-memory 传输专为在单个进程中使用而设计。无法使用 in-memory 传输在多个进程之间进行通信(即使它们在同一台机器上)。
但是,通过配置传输提供程序,可以在同一进程中与多个总线实例共享相同的in-memory传输。这是在许多单元测试中完成的,以验证跨总线实例的行为。
return MassTransit.Bus.Factory.CreateUsingInMemory(x =>
{
_inMemoryTransportCache = new InMemoryTransportCache(Environment.ProcessorCount);
x.SetTransportProvider(_inMemoryTransportCache);
x.ReceiveEndpoint("input_queue", configurator =>
{
configurator.Handler<MyMessage>(context => {});
});
});
InMemoryTransportCache 可以保存并传递给多个总线实例。同样,这都是 在同一个进程中 。