有一个关于地铁ESB的新手问题
我第一次尝试MassTransit,并试图了解如何创建队列和如何使用消息。
我有一个web应用程序和一个控制台应用程序试图分别进行发布/消费。
这是我的初始化代码。
var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
var host = sbc.Host(new Uri(hostName), h =>
{
h.Username(userName);
h.Password(password);
});
});然后从web应用程序调用以下代码。
using (Bus.Start())
{
var pubr = Bus.Publish<T>(message);
pubr.Wait();
}这将导致兔子MQ中的消息丢失。
如果我在控制台应用程序中添加了一个使用者,我就可以让这个示例工作。
sbc.ReceiveEndpoint(host,
e =>
e.Consumer<LoginEventConsumer>(d => { })
{ }我的问题是,如果没有消费者,为什么我的信息会丢失呢?
看起来,兔子MQ认为没有连接到交换的队列,因此消息丢失了。是这样吗?是否有一种方法可以在初始化过程中创建队列并在一起进行交换,而不使用大量随机命名的队列/交换来扰乱兔子MQ?
在我对MassTransit /兔子MQ的理解中,我似乎缺少了一些非常基本的东西。我认为这是一种非常常见的情况,即消费者注册发生在发布事件之后,并且一旦连接,消费者将被发送所有已发布的项目。
发布于 2015-11-10 18:25:44
RabbitMQ由交换和队列组成。
交换是由MassTransit在发布消息时根据消息类型创建的。发布不会创建任何队列。队列是存储消息以传递给消费者的地方。
当将接收端点添加到总线时,将创建队列。对于添加到接收端点的使用者、处理程序和sagas,将创建和绑定交换,以便接收端点(通过队列)接收发布到交换的消息。
在接收端点启动并在RabbitMQ (交换-交换-队列绑定)中配置它们的拓扑之前,任何发布的消息都不会传递,因为没有绑定到任何队列。一旦启动接收端点,就会存在这些绑定,并将消息传递到队列。
https://stackoverflow.com/questions/33633045
复制相似问题