azure 服务总线处理器依赖注入

sczxawaw  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(158)

我有一个Azure函数,在该函数运行时,我使用服务总线处理器从服务总线主题接收消息(请注意,这不是触发器)。根据从主题接收的消息,我正在设置CancellationToken。
我能够将所有与服务总线相关的代码移到一个单独的服务中,并将ServiceBusClient注入Program.cs:-

builder.Services.AddAzureClients(clientBuilder =>
 {
     clientBuilder.AddServiceBusClientWithNamespace(serviceBusOptions.ServiceBusUri)
                  .WithCredential(new DefaultAzureCredential())
                  .ConfigureOptions(options =>
                   {
                          //
                   });
 }

但我不确定是否也可以注入Service Bus Processor,或者是否可以将此逻辑移到服务中,基于docmentation,建议缓存。
当前代码(内部函数):-

processor = queueService.GetProcessor(subscriptionName);
 processor.ProcessMessageAsync += async (ProcessSessionMessageEventArgs args) => {...} 
 processor.ProcessErrorAsync += Processor_ProcessErrorAsync;
 await processor.StartProcessingAsync();

我想避免将这段代码保留在main函数类中,有没有什么方法可以注入它或者写得更好?

**编辑:**函数运行一些sql存储过程,有时过程可能需要时间,用户可能会请求取消。由于没有其他方法来停止正在运行的函数示例,我使用了此方法。请建议是否有更好的方法来停止正在运行的函数示例。

qv7cva1a

qv7cva1a1#

正如有人已经在这里指出的那样,我对这种做法也有类似的感觉。
问题是在函数中运行ServiceBusProcessor。虽然技术上是可能的,但它不是为短期执行而设计的。ServiceBusProcessor本身就是一个消息泵。Azure函数也是如此。也许基于函数的实现不是这种情况的方法。

相关问题