有一个关于Mass Transit ESB的新手问题
我是第一次尝试使用MassTransit并尝试了解如何创建队列以及如何使用消息.
我有一个Web应用程序和一个Console应用程序试图分别进行发布/使用
这是我的初始化代码.
var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
var host = sbc.Host(new Uri(hostName), h =>
{
h.Username(userName);
h.Password(password);
});
});
Run Code Online (Sandbox Code Playgroud)
然后从Web应用程序我调用以下代码.
using (Bus.Start())
{
var pubr = Bus.Publish<T>(message);
pubr.Wait();
}
Run Code Online (Sandbox Code Playgroud)
这导致Rabbit MQ中的消息丢失.
如果我在控制台应用程序中添加一个使用者,我可以让样本工作.
sbc.ReceiveEndpoint(host,
e =>
e.Consumer<LoginEventConsumer>(d => { })
{ }
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果没有消费者,为什么我的信息会丢失?
看起来Rabbit MQ认为没有队列连接到交换机,因此消息丢失.那是对的吗 ?有没有办法在初始化期间一起创建队列和交换,而不会使具有大量随机命名的队列/交换的Rabbit MQ混乱?
在我对MassTransit/Rabbit MQ的工作原理的理解中,我似乎缺少一些非常基础的东西.我认为这是一个非常常见的场景,即消费者注册发生的时间晚于发布事件,并且消费者将被发送一旦连接就已经发布的所有项目.
RabbitMQ由交换和队列组成.
根据消息类型,在发布消息时,MassTransit会创建交换.发布不会创建任何队列.队列是存储消息以传递给消费者的地方.
将接收端点添加到总线时会创建队列.对于添加到接收端点的消费者,处理者和传奇,创建和绑定交换,以便接收端点(通过队列)接收发布到交换的消息.
在启动接收端点并在RabbitMQ中配置其拓扑(交换 - 交换 - 队列绑定)之前,由于没有绑定到任何队列,因此不会传递任何已发布的消息.启动接收端点后,将存在这些绑定,并将消息传递到队列.
| 归档时间: |
|
| 查看次数: |
1421 次 |
| 最近记录: |