我正在使用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();
有关更多详细信息,您可以参考本文。