2016-10-28 1 views
3

Il existe deux approches pour un travailleur de service pour traiter les messages d'un service Azure Bus Queue:Différences entre ReceiveAsync et OnMessageAsync

while (!ExitRequested) 
{ 
    try 
    { 
     var message = await _queueClient.ReceiveAsync(TimeSpan.FromSeconds(1)); 

     if (message != null) 
      ProcessIt(message); 
    } 
    catch (Exception ex) 
    { 
     HandleIt(ex); 
    } 
} 

ou avec le EAP:

var onMessageOptions = new OnMessageOptions(); 

onMessageOptions.ExceptionReceived += (sender, args) => HandleIt(args.Exception); 

_queueClient.OnMessageAsync(ProcessIt, onMessageOptions); 

WaitFor(ExitRequested); 

Qu'est-ce que sont les avantages et les inconvénients des deux approches? Lequel devrait être choisi dans quel scénario particulier?

Répondre

1

ReceiveAsync fait partie de l'API client ASB .NET. OnMessage L'API est un outil que le client ASB natif propose pour simplifier la création de pompes de messages simultanées, ce qui vous permet de disposer de quelques fonctionnalités «prêtes à l'emploi» pour que vous n'ayez pas à les gérer manuellement. Parmi celles-ci:

  1. Enregistrement facile de votre pompe de message comme un rappel
  2. message auto complétion
  3. Renouvellement automatique délai d'attente pour simplifier les jetons de verrouillage renouvellement
  4. Traitement des pompes simultanées/callbacks

Ces avantages peuvent également être considérés comme des inconvénients lorsque vous avez besoin de la flexibilité et un contrôle strict sur les choses. Par exemple, si vous avez besoin de contrôler la façon dont l'achèvement du message est effectué, vous devez désactiver la saisie automatique et le faire vous-même. Mais, lorsque vous avez besoin de traiter plus d'un message entrant à la fois dans votre rappel, l'API OnMessage ne vous le permet pas, puisqu'elle fournit un message à la fois, mieux vaut [ReceiveBatchAsync][1]. J'ai eu un post about OnMessage API avantages que vous pouvez examiner.

Lequel devrait être choisi dans quel scénario particulier?

C'est quelque chose dont vous avez besoin de répondre en fonction de vos besoins et de votre architecture. Si vous n'avez pas besoin d'un contrôle strict sur les choses et d'avoir à gérer un message à la fois (étant donné que vous pouvez exécuter simultanément plusieurs messages), l'API OnMessage est facile à utiliser et le client ASB fait du bon travail. Dans le cas où vous avez besoin de traiter des lots et contrôler beaucoup d'aspects de niveau inférieur, aller avec MessageSender/MessageReceiver approche.

+0

Bon point sur le 'ReceiveBatch', mais je n'étais intéressé que par les performances/limitations du' Receive' vs 'OnMessage' pour les messages simples. Ils peuvent aussi gérer les finitions/verrouiller comme vous préférez. A moins qu'ils ne soient tous les deux exposés pour des raisons de compatibilité/cohérence, j'aimerais voir quand utiliser l'un ou l'autre (dans les scénarios à un seul msg) –

+0

Peut-être devriez-vous mettre à jour votre question. –

+0

Je ne suis pas trop préoccupé par les performances en particulier, je suis curieux de connaître les différences entre les deux modèles, y compris les performances, le cas échéant. –