J'ai plusieurs WebJobs avec des déclencheurs ServiceBus, et j'ai un MessageProcessor personnalisé pour faire un traitement après le traitement du message. Je voudrais pouvoir faire quelque chose de différent (en particulier, consigner une erreur au lieu d'un avertissement) si le message est sur sa dernière tentative, c'est-à-dire qu'il est sur le point d'être envoyé à la file d'attente. Le BrokeredMessage envoyé dans la fonction CompleteProcessingMessageAsync a le DeliveryCount, mais je ne vois pas un moyen de revenir à la file d'attente d'origine pour trouver le MaxDeliveryCount. Des idées? Les différentes files d'attente ont des MaxDeliveryCounts différents, donc la définition d'une constante n'est pas vraiment une option. La seule autre chose que je peux penser est de créer un travail séparé pour la file d'attente de lettres mortes de chaque file, mais j'aimerais pouvoir le faire au niveau de WebJob plutôt que pour chaque travail individuel.Azure Webjobs ServiceBusTrigger - effectue une fonction différente lorsque MaxDeliveryCount est atteint
public class CustomMessageProcessor : MessageProcessor
{
public CustomMessageProcessor(OnMessageOptions messageOptions) : base(messageOptions)
{
}
public override async Task CompleteProcessingMessageAsync(BrokeredMessage message, FunctionResult result, CancellationToken cancellationToken)
{
if (result.Succeeded)
{
if (!MessageOptions.AutoComplete)
{
cancellationToken.ThrowIfCancellationRequested();
await message.CompleteAsync();
}
}
else
{
cancellationToken.ThrowIfCancellationRequested();
//some other processing
//If message.DeliveryCount < maxDeliveryCount
// log warning
//else
// log error
await message.AbandonAsync();
}
}
}
Mais comment puis-je savoir de quelle file provient le message? –
@ anthony-keenan cela dépend - comment câbler votre processeur de message personnalisé? Savez-vous quelle instance de processeur lie à quelle file d'attente? Je n'ai pas d'expérience directe avec cette partie du SDK, mais je pense que lorsque les processeurs de messages personnalisés sont câblés (par exemple via un fournisseur de messagerie), vous devriez voir quelque chose comme "chemin de l'entité". instance de processeur, puis utiliser pour référencer une file d'attente dans une collection mise en cache/partagée. –
Le processeur de messages personnalisé remplace celui qui fait partie de l'infrastructure Webjobs. Il est invoqué avant et après chaque message traité par webjob, malheureusement, il est global, pas spécifique à la file, et d'après ce que je peux voir le chemin de la file d'attente n'est pas sur le message sponsorisé, je ne peux pas rechercher la file d'attente. –