You are developing a C# background service that processes smart meter telemetry data from an Azure Service Bus queue named 'meter-telemetry'. If the processing of a telemetry message fails due to an external API outage, the message must not be lost and should remain in the queue for another attempt. You need to initialize the receiver and handle the message processing in a way that guarantees at-least-once delivery. Which code segment should you use?
- var options = new ServiceBusReceiverOptions { ReceiveMode = ServiceBusReceiveMode.PeekLock };
var receiver = client.CreateReceiver("meter-telemetry", options);
var message = await receiver.ReceiveMessageAsync();
// Process message...
await receiver.CompleteMessageAsync(message);Cevap - Bvar options = new ServiceBusReceiverOptions { ReceiveMode = ServiceBusReceiveMode.ReceiveAndDelete };
var receiver = client.CreateReceiver("meter-telemetry", options);
var message = await receiver.ReceiveMessageAsync();
// Process message...
await receiver.CompleteMessageAsync(message); - Cvar options = new ServiceBusReceiverOptions { ReceiveMode = ServiceBusReceiveMode.PeekLock };
var receiver = client.CreateReceiver("meter-telemetry", options);
var message = await receiver.ReceiveMessageAsync();
// Process message...
// Allow the lock duration to expire naturally - Dvar options = new ServiceBusReceiverOptions { ReceiveMode = ServiceBusReceiveMode.ReceiveAndDelete };
var receiver = client.CreateReceiver("meter-telemetry", options);
var message = await receiver.ReceiveMessageAsync();
// Process message...
Cevap
Initialize the receiver using ServiceBusReceiveMode.PeekLock and explicitly call CompleteMessageAsync after processing is complete.
The correct approach uses PeekLock mode. This ensures that the message is only deleted from the queue when CompleteMessageAsync is explicitly called after successful processing. If the background service encounters a transient failure or crashes before completion, the lock expires and the message is released back to the queue for retry, ensuring at-least-once delivery.
Adım Adım Çözüm
Anahtar Kavram
Azure Service Bus Receive Modes
Tahmini Süre:1m 30s