我想了解 Azure 服务总线支持多少以下场景:
工作服务器将事件通知未知数量的网络服务器 每个网络服务器处理消息(处理需要一些时间 - 10-30 分钟) 当每个网络服务器处理完第一条消息后,所有网络服务器都需要接收一个新的事件。基本上,在对每个 Web 角色执行长时间运行的作业后,我试图同步多个 Web 角色。
我可以从 Azure 服务总线“免费”获得多少?
我想了解 Azure 服务总线支持多少以下场景:
工作服务器将事件通知未知数量的网络服务器 每个网络服务器处理消息(处理需要一些时间 - 10-30 分钟) 当每个网络服务器处理完第一条消息后,所有网络服务器都需要接收一个新的事件。基本上,在对每个 Web 角色执行长时间运行的作业后,我试图同步多个 Web 角色。
我可以从 Azure 服务总线“免费”获得多少?
Azure 服务总线具有许多丰富的消息传递功能,可帮助您满足需求的 Pub/Sub 方面以及请求/响应相关性。会话(分组/相关)消息的概念以及会话状态在这里非常有用。以下是一些可能有帮助的特定链接: MSDN 上的会话文章:http: //msdn.microsoft.com/en-us/magazine/jj863132.aspx
使用会话的示例: http: //code.msdn.microsoft.com/windowsazure/Brokered-Messaging-Session-41c43fb4
请求/响应示例:http ://code.msdn.microsoft.com/windowsazure/Brokered-Messaging-Request-0ce8fcaf
谈论相关性等:http ://channel9.msdn.com/Blogs/Subscribe/Service-Bus-Messaging-Deep-Dive
您可能还想在此处查看最近发布的 Service Bus Durable Task Framework 预览。有关如何使用此框架的一些示例,请参见此处。
基本上,在会话等服务总线功能之上使用此框架,您可以编写一些 C# 编排代码,大致如下:
...
// phase 1
List<Task> taskList = new List<Task>();
foreach (var serverName in serverList)
{
taskList.Add(context.ScheduleTask<object>(typeof(ExecutePhase1OnWebServerActivity), serverName));
}
// wait for all of the executions to finish
await Task.WhenAll(taskList);
// phase 2
taskList = new List<Task>();
foreach (var serverName in serverList)
{
taskList.Add(context.ScheduleTask<object>(typeof(ExecutePhase2OnWebServerActivity), serverName));
}
await Task.WhenAll(taskList);
...
根据我对您问题的解释,在我看来,在您确定所有未知数量的服务器都处理了他们的消息之前,复杂的部分不会发送第二条消息。
虽然服务总线将提供 pub/sub 和相关功能,可以在这里为您提供帮助,但对我来说,您描述了一种模式,服务器会注册他们的兴趣并承认他们已经处理了他们的消息,所以一些东西会计算 ack,一旦每个人都有确认将发送第二条消息。
这种编排不是服务总线可以帮助您的。这使您可以在工作人员角色中构建某些东西,或者在 VM 角色中可用时使用 BizTalk。
像一个长时间运行的 BizTalk 编排来处理注册、跟踪确认和发布新消息以及用于 pub sub 到 Web 服务器的服务总线主题可能是一种方法
在我看来,这就像 Workflow Foundation 和 Service Bus 的组合。