我正在开发一种解决方案,该解决方案将处理来自 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
});
}
}
我个人认为这不是正确的方法,我们应该使用WebJobs或WorkerRoles,但是我想不出任何论据来说服他按照我的想法。
所以问题是:
- 谁是对的,我还是我的同事,或者也许这两种解决方案都可以?
- 如果我的同事不正确,反对他的解决方案的论据是什么?
最佳答案
如果该 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/