【发布时间】:2016-01-05 01:52:27
【问题描述】:
我正在尝试使用 MassTransit 的 In-Memory 总线,并尝试修改 Loosely Couple Labs Publish/Subscribe Example 提供的示例,以便从使用 RabbitMQ 到 In-Memory 总线。但是,订阅者似乎没有收到消息。
我使用的是 MassTransit 3.1.2 版。
在 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 总线在同一台机器上的不同进程之间进行通信?
【问题讨论】:
-
您检查过 RabbitMQ Web 界面以了解发生了什么吗?应该有一个使用默认绑定创建的消息队列。
-
我专门将
CreateUsingRabbitMq更改为CreateUsingInMemory以创建总线。我想看看 In-Memory 总线是如何工作的,而不是 RabbitMq。因此,RabbitMq 中没有创建消息队列。 -
hmm.. 我认为它应该可以正常工作,因为它是不使用任何持久 MQ 的替代方案(仅推荐用于测试目的)。你在公共汽车上调用 .Start() 吗?请参阅此示例以供参考openstackwiki.org/wiki/…
-
我看过那个例子,并成功地让它工作。这是发布/订阅在同一个控制台应用程序中的示例。我想看看这是否可以在两个单独的控制台应用程序之间工作。我开始怀疑 In-Memory 总线仅适用于发布者和订阅者使用相同总线实例的情况,因此看起来跨应用程序传输可能不起作用。但是,我希望有人以某种方式给出明确的答案。
-
内存中的传输只在同一个进程中。无法使用内存中的传输在两个进程之间进行通信。
标签: masstransit