.Net核心API中的Azure ServiceBusClient CreateReceiver
这是我第一次尝试服务巴士,我不确定我的计划是否有效或是最佳实践 主应用程序是在私有云(记录系统)中托管的基于SQL的旧webforms Azure中新的应用程序.Net核心API在Azure DB之上,带有React前端。 用户将在主应用程序中创建记录,对于某些用户,某些记录需要在新应用程序中自动可用。与在旧的webforms中创建API客户机相比,它似乎是服务总线的完美用途。我有这方面发送的信息刚刚好,不是我有问题的一部分 我知道我能做到,但我真的应该吗?到目前为止,初步测试进展顺利 在API中,我有一个接收器设置来提取第n个消息并将它们传递给适当的处理程序。处理程序将决定完成或死信消息。完成后,它会在消息之间来回移动,等待新消息到达。目前一次只能拉一条消息,但是我已经测试过了,不受限制.Net核心API中的Azure ServiceBusClient CreateReceiver,azure,servicebus,Azure,Servicebus,这是我第一次尝试服务巴士,我不确定我的计划是否有效或是最佳实践 主应用程序是在私有云(记录系统)中托管的基于SQL的旧webforms Azure中新的应用程序.Net核心API在Azure DB之上,带有React前端。 用户将在主应用程序中创建记录,对于某些用户,某些记录需要在新应用程序中自动可用。与在旧的webforms中创建API客户机相比,它似乎是服务总线的完美用途。我有这方面发送的信息刚刚好,不是我有问题的一部分 我知道我能做到,但我真的应该吗?到目前为止,初步测试进展顺利 在API
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();
});
Task.Run(()=>
{
app.ApplicationServices.GetRequiredService().ReceiveMessagesAsync();
});
如果事情停止处理,我有一个控制器可以打电话给监听器。你的问题是什么?对不起,我对接收器的处理会有性能或可靠性问题吗?