获取跳过队列中的消息
Getting Messages In Skipped Queue
谁能帮我理解为什么我在跳过的队列 (mtSubscriber_creditAuthRequest_queue_skipped) 中收到响应消息 (CreditAuthorizationResponse)?发件人正在按预期接收响应,但它们也将进入跳过的队列。
我创建了以下消费者,除了进入跳过队列的消息外,它按预期工作:
class CreditAuthorizationConsumer : IConsumer<CreditAuthorizationRequest>
{
private Func<string, Task> _outputDelegate2;
public CreditAuthorizationConsumer(Func<string, Task> outputDelegate)
{
_outputDelegate2 = outputDelegate;
}
public async Task Consume(ConsumeContext<CreditAuthorizationRequest> context)
{
await _outputDelegate2($"Received: {context.Message}: {context.Message.CardNumber}");
await context.RespondAsync<CreditAuthorizationResponse>(new CreditAuthorizationResponse(true));
await _outputDelegate2($"Sent CreditAuthorizationResponse for card request {context.Message.CardNumber}");
}
}
这里是我发送请求的地方:
private async Task SendCreditAuthRequestAsync(int numberToSend)
{
for (int i = 0; i < numberToSend; i++)
{
var cardNumber = generateCardNumber();
await SendRequestAsync(new CreditAuthorizationRequest(cardNumber), "mtSubscriber_creditAuthRequest_queue");
await WriteOutputAsync($"Sent credit auth request for card {cardNumber}.");
}
}
这里是我初始化客户端总线的地方:
private void InitializeBus()
{
_messageBus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
var host = sbc.Host(new Uri(hostUriTextBox.Text), h =>
{
h.Username("guest");
h.Password("guest");
});
sbc.ReceiveEndpoint(host, "mtSubscriber_creditAuthResponse_queue", endpoint =>
{
endpoint.Handler<CreditAuthorizationResponse>(async context =>
{
await WriteOutputAsync($"Received: {context.Message}: {context.Message.IsAuthorized}");
});
});
});
}
这里是我初始化服务端总线的地方:
private void InitializeBus()
{
_messageBus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
var host = sbc.Host(new Uri(hostUriTextBox.Text), h =>
{
h.Username("guest");
h.Password("guest");
});
sbc.ReceiveEndpoint(host, "mtSubscriber_creditAuthRequest_queue", endpoint =>
{
endpoint.Consumer(() => new CreditAuthorizationConsumer(WriteOutputAsync));
});
}
}
Alexey Zimarev 是对的——我的响应绑定到我的请求队列(除了响应队列)。只需删除该绑定即可解决问题,而且它还没有回来。谢谢!
谁能帮我理解为什么我在跳过的队列 (mtSubscriber_creditAuthRequest_queue_skipped) 中收到响应消息 (CreditAuthorizationResponse)?发件人正在按预期接收响应,但它们也将进入跳过的队列。
我创建了以下消费者,除了进入跳过队列的消息外,它按预期工作:
class CreditAuthorizationConsumer : IConsumer<CreditAuthorizationRequest>
{
private Func<string, Task> _outputDelegate2;
public CreditAuthorizationConsumer(Func<string, Task> outputDelegate)
{
_outputDelegate2 = outputDelegate;
}
public async Task Consume(ConsumeContext<CreditAuthorizationRequest> context)
{
await _outputDelegate2($"Received: {context.Message}: {context.Message.CardNumber}");
await context.RespondAsync<CreditAuthorizationResponse>(new CreditAuthorizationResponse(true));
await _outputDelegate2($"Sent CreditAuthorizationResponse for card request {context.Message.CardNumber}");
}
}
这里是我发送请求的地方:
private async Task SendCreditAuthRequestAsync(int numberToSend)
{
for (int i = 0; i < numberToSend; i++)
{
var cardNumber = generateCardNumber();
await SendRequestAsync(new CreditAuthorizationRequest(cardNumber), "mtSubscriber_creditAuthRequest_queue");
await WriteOutputAsync($"Sent credit auth request for card {cardNumber}.");
}
}
这里是我初始化客户端总线的地方:
private void InitializeBus()
{
_messageBus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
var host = sbc.Host(new Uri(hostUriTextBox.Text), h =>
{
h.Username("guest");
h.Password("guest");
});
sbc.ReceiveEndpoint(host, "mtSubscriber_creditAuthResponse_queue", endpoint =>
{
endpoint.Handler<CreditAuthorizationResponse>(async context =>
{
await WriteOutputAsync($"Received: {context.Message}: {context.Message.IsAuthorized}");
});
});
});
}
这里是我初始化服务端总线的地方:
private void InitializeBus()
{
_messageBus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
var host = sbc.Host(new Uri(hostUriTextBox.Text), h =>
{
h.Username("guest");
h.Password("guest");
});
sbc.ReceiveEndpoint(host, "mtSubscriber_creditAuthRequest_queue", endpoint =>
{
endpoint.Consumer(() => new CreditAuthorizationConsumer(WriteOutputAsync));
});
}
}
Alexey Zimarev 是对的——我的响应绑定到我的请求队列(除了响应队列)。只需删除该绑定即可解决问题,而且它还没有回来。谢谢!