2013-03-12 37 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工作者角色,我認爲這可能對您有很大的幫助,也可能是比本案例中的主題和訂閱更好的解決方案。

相關問題