首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >物质交通的内存总线能跨进程工作吗?

物质交通的内存总线能跨进程工作吗?
EN

Stack Overflow用户
提问于 2016-01-04 15:01:40
回答 1查看 2.5K关注 0票数 0

我正在尝试使用MassTransit的内存总线,并尝试修改由松散耦合的Labs 发布/订阅示例提供的示例,使其从使用RabbitMQ过渡到内存总线。但是,订阅者似乎没有收到消息。

我使用的是3.1.2版的MassTransit。

在Publisher中,我将总线创建更改为:

代码语言:javascript
复制
var bus = Bus.Factory.CreateUsingRabbitMq(x => x.Host(new Uri("rabbitmq://localhost/"), h => { }));

至:

代码语言:javascript
复制
var bus = Bus.Factory.CreateUsingInMemory(x => { });

在订阅服务器中,我将总线创建更改为:

代码语言:javascript
复制
var bus = Bus.Factory.CreateUsingRabbitMq(x =>
    {
        var host = x.Host(new Uri("rabbitmq://localhost/"), h => { });
        x.ReceiveEndpoint(host,
                          "MtPubSubExample_TestSubscriber",
                          e => e.Consumer<SomethingHappenedConsumer>());
    });

至:

代码语言:javascript
复制
var bus = Bus.Factory.CreateUsingInMemory(x => x.ReceiveEndpoint("myQueue",
                                                                 e => e.Consumer<SomethingHappenedConsumer>()));

当我运行这段代码时,订阅者控制台应用程序没有接收到消息。由于我能够在同一个进程中得到一个回送工作,这使我相信内存中的总线不能跨进程工作。这是正确的,还是有办法使内存总线在同一台机器上的不同进程之间进行通信?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-04 17:52:27

内存传输设计为仅在单个进程中使用.不可能使用内存中的传输在多个进程之间进行通信(即使它们位于同一台计算机上)。

但是,通过配置传输提供程序,可以与同一进程中的多个总线实例共享相同的内存中传输。这是在许多单元测试中完成的,以验证总线实例的行为。

代码语言:javascript
复制
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中是不可用的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34593966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档