es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No puedo reintentar el elemento fallido en el tema de Azure Service Bus.

Tengo un proceso que consume elementos del tema Azure Service Bus. Si todo va bien no hay problema, pero si el proceso encuentra un error, necesito volver a intentar consumir el elemento fallido.

Aquí está mi controlador de mensajes:

“`public async Task StartRecieverAsync()
{
var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
{
MaxConcurrentCalls = 1,
AutoComplete = false,
MaxAutoRenewDuration = TimeSpan.FromSeconds(30)
};

<pre><code>_creatorSubscription.RegisterMessageHandler(ProcessCreatorMessageAsync, messageHandlerOptions);

Console.ReadLine();

await _creatorSubscription.CloseAsync();
</code></pre>

}

private async Task ProcessCreatorMessageAsync(Message message, CancellationToken token)
{
try
{
var jsonString = Encoding.UTF8.GetString(message.Body);
PickingRequest req = JsonSerializer.Deserialize<PickingRequest>(jsonString);

<pre><code> WorkOrderManager manager = new WorkOrderManager(_sqlManager, _cacheManager, _workOrderFunctions);
manager.CreatePickingTask(req);

SendNotification(req.UserRegistrationNumber, NotificationConstants.PickingRequestNotification);

await _creatorSubscription.CompleteAsync(message.SystemProperties.LockToken);
}
catch
{
if (message.SystemProperties.DeliveryCount < 5)
{
await _creatorSubscription.AbandonAsync(message.SystemProperties.LockToken);
}
else
{
await _creatorSubscription.DeadLetterAsync(message.SystemProperties.LockToken);
}
}
</code></pre>

}“`

En las primeras 5 veces, me gustaría intentarlo de nuevo, pero si el resultado no cambia, quiero enviar el elemento a la cola de la carta muerta. Pero después de la primera vez, el elemento va directamente a la cola de la carta muerta.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para volver a intentar consumir un elemento fallido de un tema del Azure Service Bus, puedes implementar reintentos en el manejador de mensajes. En el código proporcionado, hay un bloque ‘catch’ que realiza reintentos si el mensaje falla al procesarse por primera vez. El código verifica si el recuento de entregas es menor que 5, y si es así, abandona el mensaje para que pueda ser reintentado. Sin embargo, si ya se ha intentado cinco veces y aún falla, envía el mensaje a la cola de mensaje en cola muerta.

    Si el mensaje va a la cola de mensaje en cola muerta después del primer intento fallido, una posible razón podría ser que el recuento de entregas no se está rastreando correctamente. Verifica que el recuento de entregas se esté incrementando correctamente en las propiedades del mensaje. Además, asegúrate de que el mensaje se abandone correctamente verificando que vuelva a ser visible en la cola y pueda ser consumido.

    Si el problema persiste, considera habilitar la herramienta de diagnóstico del Service Bus para obtener más información sobre por qué se está enviando el mensaje a la cola de mensaje en cola muerta. Esto puede ayudar a identificar cualquier problema con la política o configuración del servicio bus que puede estar evitando que el mensaje se vuelva a intentar correctamente.

Comments are closed.