对 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 服务器的服务之间唯一的共同点是主机(和虚拟主机,如果使用的话)。否则,它们必须不同。
是的,它们会进入错误队列,因为发布者没有订阅它们。给你的发布者一个不同的队列名称,问题就解决了。
我想用 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 服务器的服务之间唯一的共同点是主机(和虚拟主机,如果使用的话)。否则,它们必须不同。
是的,它们会进入错误队列,因为发布者没有订阅它们。给你的发布者一个不同的队列名称,问题就解决了。