我正在开发一个处理来自Azure Service Bus的消息的解决方案,我的同事建议使用我们现有的Asp.Net WebApi应用程序并在 OWIN Startup <订阅ASB / em>例如
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 ,我无法想到任何争论让他相信我的想法。
所以问题是:
答案 0 :(得分:3)
如果该web api项目不只是监听此队列,请考虑使用Web作业或辅助角色方法的这些优势:
如果您使用Azure功能(https://azure.microsoft.com/en-us/services/functions/),您甚至可以应用无服务器计算。您只需支付使用费(不是托管您的功能)和比例,也可以单独更新。
从技术上讲,这两种方法都有效。如果消息的处理直接与Web应用程序交互(您没有告诉您对消息做了什么),那么根据工作在Web应用程序中运行它可能更有意义。
网站更好地处理请求而不是运行连续过程。 Web作业/工作者角色对于这种情况来说感觉就像是一个更好的环境,但也真正看看Azure功能。
答案 1 :(得分:1)
服务总线存在的一个原因是孤立地处理此消息/队列,因为此特定进程被识别为较大企业系统的子系统或子域。因此,app / service(以web worker角色/ web作业/ azure函数的形式)可以由具有子系统的焦点领域知识的相同或不同团队开发。由于它是一个独立的过程,因此可以根据需要独立扩展。
如果消息的处理依赖于Web应用程序业务逻辑/服务,则可能是一个红色标记,说明为什么它需要在Web API过程中。