我正在使用Azure服务总线在两个.Net核心Web API服务之间传递消息。我能够成功地在Azure中设置主题/订阅,也能够使用Web API post方法将消息发送到主题。当我尝试使用订阅阅读邮件时,我被卡住了。我已经编写了一个API方法,该方法正在尝试读取消息,它还应该在从主题中读取消息后显示消息。当我使用.Net核心控制台应用程序时,我可以读取消息,但当使用API时,消息不会显示为API输出。
有没有线索表明我遗漏了什么?提前谢谢。
代码如下:
公共异步任务获取订阅(({
subscriptionClient = new SubscriptionClient(ServiceBusConnectionString, TopicName, SubscriptionName);
RegisterOnMessageHandlerAndReceiveMessages();
await subscriptionClient.CloseAsync();
}
public void RegisterOnMessageHandlerAndReceiveMessages(({
var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler);
subscriptionClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
}
private异步任务进程MessagesAsync(消息消息,CancellationToken令牌({
var messageBody=编码.UTF8.GetString(message.Body(;
var serviceBusMessage = JsonConvert.DeserializeObject<ServiceBusMessage>(messageBody);
}
您混合了两种范式。处理程序方法在后台运行,并在有可用消息时将单个消息接收到回调中。您可以通过提高回调的并发性来扩展它。这对您没有帮助,因为您的Web API需要返回响应,并且控制器/操作需要请求时的消息,而不是调用回调(服务总线处理程序代码(时的消息。
您需要使用MessageReceiver
。对于消息接收器,您不需要设置回调。调用将导致接收到一条(或多条,如果需要(消息,或者如果没有要接收的消息,则导致null
。