2013-03-12 32 views
3

我正尝试使用Azure服务总线将消息从Web角色广播到单个辅助角色的所有实例。这是我用来接收消息的代码:将Azure服务总线广播到所有工作者角色实例

// Create the topic if it does not exist already 
      string connectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); 
     var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString); 

     // Configure Topic Settings 
     TopicDescription td = new TopicDescription("CommandTopic"); 
     td.MaxSizeInMegabytes = 5120; 
     td.DefaultMessageTimeToLive = new TimeSpan(0, 0, 1); 

     if (!namespaceManager.TopicExists("CommandTopic")) 
     { 
      namespaceManager.CreateTopic(td); 
     } 

     Random rand = new Random(); 
     double randNum = rand.Next(); 

     if (!namespaceManager.SubscriptionExists("CommandTopic", "CommandSubscription"+randNum)) 
     { 
      namespaceManager.CreateSubscription("CommandTopic", "CommandSubscription" + randNum); 
     } 

     Client = SubscriptionClient.CreateFromConnectionString(connectionString, "CommandTopic", "CommandSubscription" + randNum, ReceiveMode.ReceiveAndDelete); 
     Trace.WriteLine("SUBSCRIPTION: COMMANDSUBSCRIPTION"+randNum); 

为了创建每个工人角色实例单独订购(使所有实例收到的主题中的消息),我不得不使用一个随机数。有没有使用实例的一些Id而不是随机数的方法。有Instance.Id,但它被用作订阅名称的参数太长。有没有使用子字符串的较短版本?另外,是为每个实例创建一个单独的订阅适当的方法?之前所有实例都订阅了相同的订阅,因此只有一个实例获取消息并从订阅中删除它。

回答

0

尝试为工作角色添加一个伪造的InternalEndpoint到您的配置。这确保了角色的实例列表被填充。

+0

我认为你误解了我一点,当我说不同的订阅时,我并不是指不同的Azure订阅,而是订阅了主题http://www.windowsazure.com/en-us/develop/net /如何对导游/服务总线的主题/。 internalEndpoint提示虽然工作,实例的列表正在填充正确:) – Matt 2013-03-13 07:56:56

0

请找到下面的链接,我希望它可以帮助你让你的角色之间的互通:

http://msdn.microsoft.com/en-us/library/windowsazure/hh180158.aspx

,也请准备好以下链接一看,我认为这正是你正在寻找: http://windowsazurecat.com/2011/08/how-to-simplify-scale-inter-role-communication-using-windows-azure-service-bus/

我认为你在说什么就像情况4在下面的链接中角色可以沟通到其他几个角色。我不确定您询问的是否可行,但尝试使用带有Service Bus Queue的Windows Azure工作者角色,我认为这可能对您有很大的帮助,也可能是比本案例中的主题和订阅更好的解决方案。

相关问题