2017-01-22 1 views
1

J'ai un site web et un webjob, où le site est un client oneway et le webjob est worker. J'utilise le transport Azure ServiceBus pour la file d'attente.Rebus - Envoi d'un message différé à une autre file d'attente (Azure ServiceBus)

je reçois l'erreur suivante:

InvalidOperationException: Cannot use ourselves as timeout manager because we're a one-way client

lorsque je tente d'envoyer Bus.Defer du bus de site Web.

Étant donné qu'Azure Servicebus prend en charge la gestion de timeoutmanager, cet événement de travail ne devrait-il pas provenir d'un client Oneway? La documentation sur Bus.Defer indique: Defers la livraison du message en y attachant un en-tête et en le livrant au point de terminaison du gestionnaire de délai d'attente configuré /// (par défaut nous-mêmes). Lorsque le moment est venu, le message différé est renvoyé à l'adresse indiquée par l'en-tête «

ce que je pourrais résoudre ce problème en réglant le returnaddress comme ceci:.

headers.Add(Rebus.Messages.Headers.ReturnAddress, "webjob-worker"); 

Répondre

0

Could I fix this by setting the ReturnAddress like this: headers.Add(Rebus.Messages.Headers.ReturnAddress, "webjob-worker");

Oui :)

le problème est le suivant: Lorsque vous await bus.Defer un message avec Rebus, la valeur par défaut de retour

le message à la file d'attente d'entrée de l'expéditeur Lorsque vous êtes un wa. y client, vous n'avez pas de file d'attente d'entrée et vous n'avez donc aucun moyen de recevoir le message une fois le délai écoulé.

La définition de l'adresse de retour corrige cela, même si j'admets que la solution ne donne pas vraiment d'élégance. Une API serait plus agréable si Rebus avait une méthode Defer sur son API de routage, ce qui pourrait être appelé comme ceci:

var routingApi = bus.Advanced.Routing; 

await routingApi.Defer(recipient, TimeSpan.FromSeconds(10), message); 

mais malheureusement, il n'a pas cette méthode pour le moment. Pour résumer: Oui, définir explicitement l'adresse de retour sur le message différé permet à un client unidirectionnel de différer les messages.

+0

Est-ce une fonctionnalité qui pourrait être ajoutée à Rebus? Si oui, est-ce que je devrais créer un problème au dépôt de GitHub? –

+0

Eh bien, j'ai pensé à cela - mais alors je doutais de l'endroit où il devrait être ajouté, et je me demandais aussi comment l'appeler ..... pour l'instant, je vous suggère de l'ajouter en créant une méthode d'extension sur 'IBus' qui accepte la file d'attente de destination en tant qu'argument – mookid8000