gpt4 book ai didi

c# - Azure 事件中心 - 如何在 .Net Core WebAPI 中实现使用者?

转载 作者:行者123 更新时间:2023-12-02 08:27:35 27 4
gpt4 key购买 nike

因此,我需要在 WebAPI (.Net core 3.1) 应用程序中实现 Consumer,并阅读 Microsoft 文档并观看有关它的几个视频,我得到了这个解决方案。

这是 IServiceCollection 的扩展方法,我从 Startup.cs 调用它来实例化我的 Consumer(连接字符串和容器名称仅用于测试):

    private static async Task AddPropostaEventHub(this IServiceCollection services)
{
const string eventHubName = "EVENT HUB NAME";
const string ehubNamespaceConnectionString = "EVENT HUB CONNECTION STRING";
const string blobContainerName = "BLOB CONTAINER NAME";
const string blobStorageConnectionString = "BLOB CONNECTION STRING";

string consumerGroup = EventHubConsumerClient.DefaultConsumerGroupName;
BlobContainerClient storageClient = new BlobContainerClient(blobStorageConnectionString, blobContainerName);
EventProcessorClient processor = new EventProcessorClient(storageClient, consumerGroup, ehubNamespaceConnectionString, eventHubName);

processor.ProcessEventAsync += ProcessEvent.ProcessEventHandler;
processor.ProcessErrorAsync += ProcessEvent.ProcessErrorHandler;

await processor.StartProcessingAsync();
}

ProcessorEventHandler 类:

public static class ProcessEvent
{
public static async Task ProcessEventHandler(ProcessEventArgs eventArgs)
{
var result = Encoding.UTF8.GetString(eventArgs.Data.Body.ToArray());

//DO STUFF
await eventArgs.UpdateCheckpointAsync(eventArgs.CancellationToken);
}

public static Task ProcessErrorHandler(ProcessErrorEventArgs eventArgs)
{
//DO STUFF
return Task.CompletedTask;
}
}

这段代码可以工作,但我的问题是:这样实现可以吗?如果消费者不停歇,会有问题吗?它可以阻止我的代码中的其他任务(或请求)吗?

是否有更好的方法在.Net Core中使用依赖注入(inject)来实现它?

我找不到任何在 WebApi 中实现的示例,这有什么原因吗?

最佳答案

正如 Jesse Squire 提到的,WebAPI 不一定是正确的实现方法,但它主要取决于您的目标是什么。

如果您正在制作还包含事件中心监听器的 API,则应在 IHostedService interface 下实现它。 。您现有的AddPropostaEventHub()方法进入接口(interface)的StartAsync(CancellationToken cancellationToken)内部这是 .NET Core 用于启动后台任务的方法。然后,在 Startup.cs 中,将处理程序注册为 services.AddHostedService<EventHubService>(); 。这可确保长时间运行的监听器得到正确处理,而不会阻止传入的 HTTP 请求。

如果您还没有涉及 API 或能够完全拆分流程,那么您应该考虑将其创建为控制台应用程序而不是托管服务,这进一步分离了 API 和事件监听器的角色。

您没有提到要在哪里部署它,但如果您碰巧要部署到 Azure 应用服务,您确实有一些选项可以将接收器与 API 分开,在这种情况下,我绝对建议您这样做所以。在应用程序服务内部,有一个名为 WebJobs 的功能。它专门用于处理此类事情,而不使其成为 API 的一部分。一个不错的选择是 Functions 。在这种情况下,您根本不必担心为事件中心设置 DI,主机进程会为您处理这件事。

关于c# - Azure 事件中心 - 如何在 .Net Core WebAPI 中实现使用者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63705977/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com