ProcessMessagesAsync方法未在Azure服务总线订阅中激发



我正在使用Azure服务总线在我的两个.Net核心Web API应用程序之间进行消息传递。通过使用topicClient,我可以将消息发送到ABS。但是,在使用订阅客户端接收消息时,我遇到了这个问题。

ProcessMessagesAsync-方法在我给出"Console.Read((;"之前不会激发。我无法给出,因为我使用的是Web API。

否则,我怎么能启动这个ProcessMessagesAsync方法-它能完美地读取我的消息。

提前谢谢。

public async Task GetMessageFromSubscription()
{
subscriptionClient = new SubscriptionClient(ServiceBusConnectionString, TopicName, SubscriptionName);
RegisterOnMessageHandlerAndReceiveMessages();
//  Console.Read();  ------- Without this line 
await subscriptionClient.CloseAsync();
}
public void RegisterOnMessageHandlerAndReceiveMessages()
{
var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler);
subscriptionClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
}

private async Task ProcessMessagesAsync(Message message, CancellationToken token)
{
var messageBody = Encoding.UTF8.GetString(message.Body);
var serviceBusMessage = JsonConvert.DeserializeObject<WorkIntakeItem>(messageBody);
await subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
}

这是一个循环,它在进程运行的同时也在运行。当进程结束时,处理程序将终止

如果您有连续的消息流,那么处理程序(也称为消息泵(是一个合适的选项。如果您只需要接收一条消息并退出,那么有一个消息MessageReceiver.ReceiveAsync的阻塞选项。你可以控制应用程序何时关闭。

static IMessageReceiver messageReceiver;
RegisterOnMessageHandlerAndReceiveMessages();
Message message = await messageReceiver.ReceiveAsync();
await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
await messageReceiver.CloseAsync();
await subscriptionClient.CloseAsync();

有关更多详细信息,您可以参考本文。

最新更新