gpt4 book ai didi

.net - 大众运输 : No consumer

转载 作者:行者123 更新时间:2023-12-02 06:31:50 26 4
gpt4 key购买 nike

有一个关于公共(public)交通 ESB 的新手问题

我第一次尝试 MassTransit,并试图了解队列的创建方式和消息的使用方式。

我有一个 Web 应用程序和一个控制台应用程序分别尝试发布/使用

这是我的初始化代码。

var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
var host = sbc.Host(new Uri(hostName), h =>
{
h.Username(userName);
h.Password(password);
});

});

然后从网络应用程序我调用以下代码。
 using (Bus.Start())
{
var pubr = Bus.Publish<T>(message);

pubr.Wait();

}

这会导致消息在 Rabbit MQ 中丢失。

如果我在控制台应用程序中添加消费者,我可以让示例工作。
 sbc.ReceiveEndpoint(host, 
e =>
e.Consumer<LoginEventConsumer>(d => { })
{ }

我的问题是,如果没有消费者,为什么我的消息会丢失?

看起来 Rabbit MQ 认为没有队列连接到交换器,因此消息丢失了。那是对的吗 ?有没有办法在初始化期间一起创建队列和交换,而不会用大量随机命名的队列/交换使 Rabbit MQ 困惑?

看起来我在理解 MassTransit/Rabbit MQ 如何工作时缺少一些非常基本的东西。我会认为这是一个非常常见的场景,即消费者注册发生在发布事件之后,并且一旦连接,消费者将收到所有已发布的项目。

最佳答案

RabbitMQ 由交换和队列组成。

MassTransit 在发布消息时根据消息类型创建交换。发布不会创建任何队列。队列是存储消息以传递给消费者的地方。

将接收端点添加到总线时会创建队列。对于添加到接收端点的消费者、处理程序和 saga,将创建并绑定(bind)交换,以便发布到交换的消息由接收端点(通过队列)接收。

在接收端点启动并在 RabbitMQ 中配置它们的拓扑(交换交换队列绑定(bind))之前,不会传递任何发布的消息,因为没有任何队列的绑定(bind)。一旦接收端点启动,这些绑定(bind)就存在并且消息将被传递到队列。

关于.net - 大众运输 : No consumer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33633045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com