0

Я использую шину служебной шины azure для отправки сообщений туда и обратно между ролью в Интернете и ролью пользователя, и я действительно думал, что это действительно хорошее решение, но в последнее время я обнаружил, что служебная шина очень неустойчива, иногда она работает, а иногда и сообщения идут в мертвую букву без всякой причины. Я не знаю, есть ли проблема в моем коде, но мне кажется, что это просто неустойчиво, потому что иногда это работает, а иногда и нет. Поэтому я хотел знать, есть ли альтернативное решение для служебной шины, или я был бы очень рад узнать о любых ошибках, которые я совершаю в реализации служебной шины, что приводит к моей вышеупомянутой проблеме. Ниже мой кодКак отправлять сообщения между ролью в Интернете и ролью, отличной от 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, но прибегая к помощи вокруг должен получить вы начали

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

+0

Но с очередями хранения в лазури, я должен был бы повторно опросить очереди, чтобы проверить, есть ли в очереди новые сообщения! Я не хочу этого делать, так как это увеличит мою стоимость с огромным запасом ..... вот почему я предпочитал служебную шину, но, к сожалению, сервисная шина, похоже, не достаточно надежна! Любые другие идеи? – Bitsian

+0

ОК, редактируя мой ответ – Igorek

+0

Спасибо, проверим! Также если вы не возражаете, можете ли вы посмотреть на мой код служебной шины и сообщить мне, если вы обнаружите ошибки, которые могут вызвать проблему? – Bitsian

0

Есть несколько причин, почему сообщение идет в DeadLetter очередь без явного вызова сообщения .DeadLetter(). Проверьте следующее: 1) TimeToLive в очереди и сообщение, если это время истекает, тогда сообщения сбрасываются и не доставляются. По умолчанию это бесконечно. 2) Счетчик доставки определяет, сколько раз сообщение получено до того, как оно будет сработано. Выше я не вижу обработки исключений, поэтому скажу, что вы получили сообщение об ошибке при обработке сообщений, и завершение не было вызвано в сообщении, количество доставки увеличилось бы. В очереди у вас есть option, чтобы установить, сколько раз сообщение должно быть доставлено до того, как оно будет мертвым.

+0

MaxDeliveryCount по умолчанию установлен в 10, поэтому, к сожалению, это не причина. У меня такое чувство, что это связано с тем, как асинхронно обрабатывает 3 клиента сервисной шины одновременно. Какие-либо входы по этому поводу? – Bitsian