如何解决.Net Core API 中的 Azure ServiceBusClient CreateReceiver
这是我第一次尝试使用 Service Bus,我不确定我的计划是否有效或最佳实践。
主要应用程序是在私有云(记录系统)中托管的 sql 上的旧网络表单
Azure 中的新应用程序 .Net Core API 通过带有 React 前端的 Azure DB。
用户将在主应用程序中创建记录,对于某些用户,某些记录需要在新应用程序中自动可用。与其在旧的 webforms 中创建 API 客户端相比,它似乎是服务总线的完美使用。我这边发送消息就好了,这不是我有问题的部分。
我知道我可以做到这一点,但我真的应该这样做吗?到目前为止,初步测试进展顺利。
在 API 中,我有一个接收器设置来提取第 n 个消息并将它们传递给适当的处理程序。处理程序将决定完成消息还是死信消息。完成后,它会遍历消息并等待新消息到达。目前一次只提取一条消息,但我已经测试过不受限制。
public class ServiceBusMessageReceiver : IServiceBusMessageReceiver
{
private readonly IConfiguration _configuration;
private readonly IServiceBusMessageHandlerService _handlerService;
private ServiceBusClient _client;
public ServiceBusMessageReceiver(IConfiguration configuration,IServiceBusMessageHandlerService handlerService)
{
_configuration = configuration;
_handlerService = handlerService;
}
public async Task ReceiveMessagesAsync()
{
_client ??= new ServiceBusClient(_configuration.GetConnectionString("ServiceBusUrl"));
try
{
await Listen();
}
catch (Exception ex)
{
//Todo:Logger
//Did the message lock expire?
await ReceiveMessagesAsync();
}
}
private async Task Listen()
{
var receiver = _client.CreateReceiver(_configuration.GetConnectionString("ServiceBusQueue"));
await _handlerService.DelegateMessage(await receiver.ReceiveMessagesAsync(maxMessages: 1),receiver);
await ReceiveMessagesAsync();
}
}
在 Startup.cs 中
Task.Run(() =>
{
app.applicationservices.GetrequiredService<IServiceBusMessageReceiver>().ReceiveMessagesAsync();
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。