对 Masstransit ReceiveFrom 方法和消费者行为感到困惑

Confused by Masstransit ReceiveFrom method and consumer behaviour

我想用 RabbitMq 创建一个队列,在其中我将在一侧发送一些消息并在另一个应用程序中接收。我正在使用以下代码这样做:

return ServiceBusFactory.New(x =>
        {
            var uriString = string.Format(@"rabbitmq://{0}/{1}/{2}?prefetch={3}", host, virtualHost, queueName,
                prefetch < 1 ? 1 : prefetch);
            x.UseRabbitMq(r => r.ConfigureHost(new MessageUrn(uriString), h =>
            {
                h.SetUsername(user);
                h.SetPassword(password);
                h.SetRequestedHeartbeat(3);

            }));

            x.ReceiveFrom(uriString);

            x.UseJsonSerializer<ServiceBusConfigurator>();

            f(x);
        });

MessageUrn uri 和 ReceiveFrom 应该具有相同的 uri,否则为 ReceiveFrom 方法指定的 uri 确定总线端点。但这意味着我的发布者也是同一队列的消费者。当没有接收者时,所有消息都进入 queuename_error 队列。当有接收器时,一切似乎都正常。

我做错了什么?我理解为什么消息会进入错误队列——因为发布者没有订阅它们,但同时他是消费者,因此 发生错误情况。当接收器(重新)启动时,是否可以从错误队列中恢复消息?

公共交通是 2.10.0.0。

提前致谢。

每个服务的.ReceiveFrom() 地址应该是唯一的,并且仅当服务具有相同的消费者并使用相同的消息类型时才共享。使用同一 RabbitMQ 服务器的服务之间唯一的共同点是主机(和虚拟主机,如果使用的话)。否则,它们必须不同。

是的,它们会进入错误队列,因为发布者没有订阅它们。给你的发布者一个不同的队列名称,问题就解决了。