An Azure service that enables bidirectional communication between internet of things (IoT) devices and applications.
Hello 51155945,
Welcome to Microsoft Q&A and Thank you for reaching out,
Based on the details you’ve shared, the ~50-second delay you’re observing is expected behavior and is primarily caused by the use of DeliveryAcknowledgement.Full, rather than any throttling issue.
Root cause
When you set:
messageToSend.setDeliveryAcknowledgement(DeliveryAcknowledgement.Full);
the serviceClient.send() call does not return immediately. Instead, it waits for the complete delivery cycle:
- IoT Hub accepts the message
- The message is delivered to the device
- The device processes the message
- The device sends an acknowledgment back to IoT Hub
Only after all these steps are completed (or a timeout occurs) will the call return.
Why ~50–60 seconds delay occurs
If your device is:
- Not continuously connected
- Using HTTP polling instead of persistent connection
- Slow to receive or process messages
then IoT Hub waits for the acknowledgment until it times out (typically around 60 seconds). This aligns with the ~50-second duration you’re seeing.
Is this due to C2D throttling?
No, this is not related to Cloud-to-Device (C2D) throttling.
If throttling were the issue, you would see:
- Explicit errors (e.g., HTTP 429 / quota exceeded)
- Failed or rejected requests
Instead, your request is succeeding but waiting indicating acknowledgment delay, not throttling.
Recommendations
To improve performance and reduce latency:
Adjust acknowledgment mode: If device-level confirmation is not required, switch to:
-
DeliveryAcknowledgement.None→ returns immediately after IoT Hub accepts the message -
DeliveryAcknowledgement.OnArrival→ waits until IoT Hub queues the message
This will reduce latency from ~50 seconds to near real-time.
Ensure device connectivity:
- Use MQTT or AMQP (persistent connections) instead of HTTP polling
- Make sure the device is online and actively listening for C2D messages
Validate device-side processing:
- Confirm how quickly the device receives and acknowledges messages
- Any delay on the device side directly impacts the send call duration
Enable diagnostics and logging:
- Enable SDK-level logging to inspect request/response timing
- Review IoT Hub metrics for delivery status and errors
The delay is caused by DeliveryAcknowledgement.Full, which makes the send operation wait for the device acknowledgment. If the device is not immediately available or responsive, the operation blocks until timeout (~60 seconds). This is expected behavior and not due to throttling.
To achieve faster response times, consider using a less strict acknowledgment mode or ensure the device is continuously connected and processing messages in real time.
Please refer this
• Lab :: Azure IOT Hub Source – https://supportability.visualstudio.com/Fabric/_wiki/wikis/Fabric/1210506/Fabric Experiences/Real-time Analytics – Event streams/Trainings/Labs/Lab :: Event Stream Sources/Lab :: Azure IOT Hub Source
• Issues with Azure Security Center and IoT Hub – https://docs.microsoft.com/azure/asc-for-iot/troubleshoot-agent
• Problems related to the Azure Stack Portal or CLI – https://docs.microsoft.com/azure-stack/user/iot-hub-overview?view=azs-2005
• Issues connecting a device to IoT Hub for the first time – https://docs.microsoft.com/azure/iot-hub/tutorial-connectivity
• Other issues (IoT Hub SDK reference) – https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-sdks
• Issues with Event Grid and IoT Hub – https://docs.microsoft.com/azure/iot-hub/iot-hub-event-grid
I Hope this helps. Do let me know if you have any further queries.
If this answers your query, please do click Accept Answer and Yes for was this answer helpful.
Thank you!