0

私はAzureサービスバスを使用して、Webロールとワーカーロールの間でメッセージを送受信してきましたが、これは本当に良い解決策だと本当に思っていましたが、最近、サービスバスが非常に不安定であることがわかりました。理由もなくデッドレターに。私のコードに問題があるかどうかはわかりませんが、機能する場合と機能しない場合があるため、単に不安定であるように見えます。したがって、サービスバスに代わる解決策があるかどうかを知りたいと思っていました。または、上記の問題を引き起こしているサービスバスの実装で行われている間違いを知りたいと思っています。以下は私のコードです

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;
 }

上記のコードでは、1 つの Service Bus クライアントのみのメソッドを示しています。私のワーカー ロールでは、3 つのサービス バス クライアントを使用しています。つまり、異なるキューからメッセージを非同期的に送受信しています。いくつかのメッセージがどのように機能し、いくつかのメッセージが理由もなくデッドレターになるのは本当に奇妙です。何が問題なのか分からない人がいたら教えてください

4

2 に答える 2

0

NServiceBus を検討しましたか? SignalR と NServiceBus の統合に関する例がたくさんあるかどうかはわかりませんが、ググってみてください。

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

于 2013-03-04T14:38:42.567 に答える
0

message.DeadLetter() を明示的に呼び出さずにメッセージが DeadLetter キューに入る理由はいくつかあります。以下を確認してください。1) Queue とメッセージの TimeToLive。この時間が経過すると、メッセージは配信不能になり、配信されませんデフォルトでは、これは無限です。2) 配信カウントは、配信不能になる前にメッセージを受信する回数を決定します。上記では例外処理が表示されていないため、メッセージ処理中にエラーが発生し、メッセージに対して完了が呼び出されなかったとします。配信カウントが増加します。キューには、配信不能になる前にメッセージを配信する回数を設定するオプションがあります。

于 2013-03-05T14:41:39.753 に答える