c# - 使用 Owin Startup 类中的 OnMessage 订阅 Azure 服务总线

标签 c# azure asp.net-web-api2 owin azureservicebus

我正在开发一种解决方案,该解决方案将处理来自 Azure 服务总线的消息,我的同事建议使用我们现有的 Asp.Net WebApi 应用程序之一并在 OWIN Startup 例如

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // ... registering WebApi etc

        var queueClient = SubscriptionClient.CreateFromConnectionString("connection string", "sometopic", "somesubscription");

        queueClient.OnMessage(m =>
        {
            //do something with message

            m.Complete();
        }, new OnMessageOptions
        {
            AutoComplete = false,
            AutoRenewTimeout = TimeSpan.FromSeconds(30),
            MaxConcurrentCalls = 30
        });
    }
}

我个人认为这不是正确的方法,我们应该使用WebJobsWorkerRoles,但是我想不出任何论据来说服他按照我的想法。

所以问题是:

  1. 谁是对的,我还是我的同事,或者也许这两种解决方案都可以?
  2. 如果我的同事不正确,反对他的解决方案的论据是什么?

最佳答案

如果该 Web API 项目不仅仅是监听此队列,请考虑使用 Web 作业或辅助角色方法的以下优势:

  • 辅助角色可以独立于网络应用进行扩展
  • 网络作业/辅助角色可以独立于网络应用进行更新
  • 进程隔离:如果一个进程失败,另一个进程仍可能运行。

如果您使用 Azure Functions ( https://azure.microsoft.com/en-us/services/functions/ ),您甚至可以应用无服务器计算。您只需为使用付费(而不是为函数的托管付费),并且也可以独立扩展和更新。

从技术上讲,这两种方法都可行。如果消息的处理直接与 Web 应用程序交互(您没有告诉您如何处理消息),那么根据工作在 Web 应用程序中运行它可能更有意义。

网站更适合处理请求,而不是运行连续的流程。对于此类情况,Web 作业/辅助角色感觉像是一个更好的环境,但也请真正看看 Azure Functions。

关于c# - 使用 Owin Startup 类中的 OnMessage 订阅 Azure 服务总线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40454476/

相关文章:

c# - 如何从 Blazor 页面修改布局?

c# - StackExchange.Redis 与 Azure Redis 速度慢得无法使用或引发超时错误

assinableScopes 中带有通配符的 Azure 自定义 RBAC - 可能吗?

rest - 如何在 REST 服务中命名自定义端点

javascript - 使用 AngularJs 显示多个表中的数据

c# - WPF 将图像添加到 Canvas 而不将它们添加为资源

c# - WPF - 设置相对于用户控件的对话框窗口位置

c# - Redis 缓存实现 - c#

azure - 如何将 Microsoft Identity Platform 与 Delphi VCL 程序结合使用?

c# - 通过 Web API 2 将 ASP.NET 身份(用户管理)添加到 OData