0

我一直使用azure服務總線來回發送Web角色和工作者角色之間的消息,我真的認爲這是一個非常好的解決方案,但最近我發現服務總線非常不穩定,有時它工作,有時候消息毫無緣由地成爲死信。我不知道它在我的代碼中是否存在問題,但它在我看來它只是不穩定的,因爲它有時會起作用,有時它不起作用。所以我想知道是否有任何替代解決方案服務巴士,或者我會很高興知道在服務巴士實施中出現的任何錯誤,這會導致我的上述問題。以下是我的代碼如何在Web角色和Service Bus之外的輔助角色之間發送消息?

public override void Run() 
{ 
    while (!IsStopped) 
    { 
     try 
     { 
      if (BroadcastReceived) 
       { 
        BroadcastReceived = false; 
        // Receive the message from Web Role to upload the broadcast to queue 
        BroadcastClient.BeginReceive(OnWebRoleMessageReceived, null); 
       } 

       if (SignalRMessageReceived) 
       { 
        SignalRMessageReceived = false; 
        // Receive the message from SignalR BroadcastHub 
        SignalRClient.BeginReceive(OnSignalRMessageReceived, null); 
       } 

       if (SignalRFirstTimeMessageReceived) 
       { 
        SignalRFirstTimeMessageReceived = false; 
        // Receive the message from SignalR BroadcastHub 
        SignalRFirstTimeClient.BeginReceive(OnSignalRFirstTimeMessageReceived, null); 
       } 
    } 
} 
public void OnWebRoleMessageReceived(IAsyncResult iar) 
{ 
    BrokeredMessage receivedBroadcastMessage = null; 
    receivedBroadcastMessage = BroadcastClient.EndReceive(iar); 

    if (receivedBroadcastMessage != null) 
    { 
     // Process the message 
     receivedBroadcastMessage.Complete(); 
    } 
BroadcastReceived = true; 
} 

在上面的代碼中,我展示了只有一個服務總線客戶端的方法。在我的工作者角色中,使用3個服務總線客戶端,即異步地發送和接收來自不同隊列的消息。它真的很奇怪一些消息如何工作,一些沒有任何理由去死信,有時它的替代品,所以我認爲我的代碼中必須有一個問題,但我找不到任何。請讓我知道如果有人不知道問題是什麼

回答

0

你有沒有考慮NServiceBus?我不知道是否有很多的例子關於集成SignalR和NServiceBus,而周圍的Googling應該讓你開始

http://ben.onfabrik.com/posts/push-notifications-with-nservicebus-and-signalr

+0

但是對於天青的存儲隊列,我不得不反覆輪詢隊列以檢查隊列中是否有新消息!我不想這樣做,因爲它會增加我的成本巨大的利潤.....這就是爲什麼我首選服務巴士,但不幸的是,服務巴士似乎不夠可靠!任何其他想法? – Bitsian 2013-03-04 19:13:08

+0

好的,編輯我的回覆 – Igorek 2013-03-04 19:36:45

+0

謝謝,會檢查出來!此外,如果您不介意可以看看我的服務巴士代碼,並告訴我是否發現可能導致問題的任何錯誤? – Bitsian 2013-03-05 05:16:41

0

有幾個原因,消息進入死信隊列,不給消息的顯式調用.DeadLetter()。請檢查以下內容: 1)TimeToLive在隊列和消息上,如果此時間到期,則消息是靜態的,並且不會傳遞。默認情況下,這是無限的。 2)傳遞計數確定在停頓之前收到消息的次數。在上面,我沒有看到任何異常處理,所以說你在消息處理過程中遇到了錯誤,並且沒有在消息中調用完成,交付計數會增加。在隊列中,您有option來設置消息在死信之前傳遞的次數。

+0

MaxDeliveryCount默認設置爲10,所以不幸的是,這不是原因。我有一種感覺,這與如何在同一時間異步處理3個服務總線客戶端有關。對此有什麼意見? – Bitsian 2013-03-06 06:18:23

相關問題