我一直使用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個服務總線客戶端,即異步地發送和接收來自不同隊列的消息。它真的很奇怪一些消息如何工作,一些沒有任何理由去死信,有時它的替代品,所以我認爲我的代碼中必須有一個問題,但我找不到任何。請讓我知道如果有人不知道問題是什麼
但是對於天青的存儲隊列,我不得不反覆輪詢隊列以檢查隊列中是否有新消息!我不想這樣做,因爲它會增加我的成本巨大的利潤.....這就是爲什麼我首選服務巴士,但不幸的是,服務巴士似乎不夠可靠!任何其他想法? – Bitsian 2013-03-04 19:13:08
好的,編輯我的回覆 – Igorek 2013-03-04 19:36:45
謝謝,會檢查出來!此外,如果您不介意可以看看我的服務巴士代碼,並告訴我是否發現可能導致問題的任何錯誤? – Bitsian 2013-03-05 05:16:41