我正在尝试使用MassTransit的内存总线,并尝试修改由松散耦合的Labs 发布/订阅示例提供的示例,使其从使用RabbitMQ过渡到内存总线。但是,订阅者似乎没有收到消息。
我使用的是3.1.2版的MassTransit。
在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>()));当我运行这段代码时,订阅者控制台应用程序没有接收到消息。由于我能够在同一个进程中得到一个回送工作,这使我相信内存中的总线不能跨进程工作。这是正确的,还是有办法使内存总线在同一台机器上的不同进程之间进行通信?
发布于 2016-01-04 17:52:27
内存传输设计为仅在单个进程中使用.不可能使用内存中的传输在多个进程之间进行通信(即使它们位于同一台计算机上)。
但是,通过配置传输提供程序,可以与同一进程中的多个总线实例共享相同的内存中传输。这是在许多单元测试中完成的,以验证总线实例的行为。
return MassTransit.Bus.Factory.CreateUsingInMemory(x =>
{
_inMemoryTransportCache = new InMemoryTransportCache(Environment.ProcessorCount);
x.SetTransportProvider(_inMemoryTransportCache);
x.ReceiveEndpoint("input_queue", configurator =>
{
configurator.Handler<MyMessage>(context => {});
});
});可以保存InMemoryTransportCache并将其传递给多个总线实例。同样,这一切都在同一个过程中。
更新
此功能在很久以前就被废弃了,并且在当前版本的MassTransit中是不可用的。
https://stackoverflow.com/questions/34593966
复制相似问题