J'ai 2 files d'attente Azure Service Bus dans le même espace de noms. Je place des messages planifiés à l'aide de ScheduledEnqueueTimeUtc dans l'une des files d'attente ("queue-planifiée") et les messages que je veux être traités immédiatement dans l'autre file d'attente ("file d'attente maintenant").

Ce que je voudrais faire, c'est définir la propriété de transfert automatique de la "file d'attente planifiée" pour transférer les messages vers la "file d'attente maintenant" lorsque les messages atteignent leur ScheduledEnqueueTimeUtc. Le transfert de file d'attente fonctionnera-t-il de cette façon? Ou le transfert automatique de file d'attente envoie-t-il immédiatement les messages mis en file d'attente et non mis en file d'attente?

Je n'ai trouvé nulle part de documentation ou d'exemples expliquant comment le transfert gère les messages qui sont actuellement "invisibles" dans la file d'attente parce qu'ils n'ont pas atteint la date et l'heure de la file d'attente.

0
JeffC 16 janv. 2017 à 23:39

2 réponses

Meilleure réponse

Le transfert enverra tous les messages de votre file d'attente d'origine à la file d'attente de destination. Si vous regardez la file d'attente de destination, vous trouverez le message avec ScheduledEnqueueTimeUtc, mais vous ne pourrez pas le recevoir avant l'heure d'arrivée.

0
Sean Feldman 16 janv. 2017 à 21:53

Vous devriez pouvoir y parvenir avec un sujet et deux abonnements. Je n'ai pas le temps aujourd'hui de faire la reproduction moi-même, alors faites-moi savoir si cela ne fonctionne pas:

Créez un sujet avec deux abonnements. Appelez l'un "maintenant" et l'autre "plus tard". Envoyez des messages avec une propriété personnalisée (dans Propriétés) que vous appelez "ScheduledTime" et que vous définissez sur la date et heure souhaitée que vous souhaitez que les messages apparaissent plus tard dans "Scheduled-queue" (tous ces noms sont constitués)

Lors de la création de l'abonnement «maintenant», définissez-le sur ForwardTo sur «now-queue» et ajoutez une règle, avec la surcharge CreateSubscription (SubscriptionDescription, RuleDescription) si vous utilisez C #, par lequel vous définissez le filtre sur TrueFilter et définissez pour effectuer une action sur une SqlRuleAction avec l'expression "REMOVE ScheduledTime "qui annule le délai d'expiration planifié.

Lors de la création de l'abonnement "plus tard", définissez-le sur ForwardTo sur la "file d'attente planifiée" et ajoutez une règle avec un TrueFilter et définissez l'action sur une SqlRuleAction qui exécute "SET sys.ScheduledEnqueueTimeUtc = ScheduledTime; REMOVE ScheduledTime"

La règle copiera votre valeur à l'heure de mise en file d'attente souhaitée pour la file d'attente cible avant qu'elle ne soit transférée.

En théorie, tout devrait fonctionner.

1
Clemens Vasters 17 janv. 2017 à 07:47