You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: articles/application-gateway/application-gateway-private-deployment.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -32,6 +32,9 @@ Application Gateway v2 can now address each of these items to further eliminate
32
32
* Ability to override the default route to the Internet (0.0.0.0/0)
33
33
* DNS resolution via defined resolvers on the virtual network [Learn more](../virtual-network/manage-virtual-network.yml#change-dns-servers), including private link private DNS zones.
34
34
35
+
>[!Tip]
36
+
> See [Application Gateway DNS resolution](application-gateway-dns-resolution.md) for detailed guidance on configuring DNS for Application Gateway.
37
+
35
38
Each of these features can be configured independently. For example, a public IP address can be used to allow traffic inbound from the Internet and you can define a **_Deny All_** outbound rule in the network security group configuration to prevent data exfiltration.
| AV36 |Dual Intel Xeon Gold 6140 CPUs (Skylake microarchitecture) with 18 cores/CPU @ 2.3 GHz, Total 36 physical cores (72 logical cores with hyperthreading)| 576 | OSA | 3.2 (NVMe) | 15.20 (SSD) | Selected regions (*) |
20
+
| AV36P | Dual Intel Xeon Gold 6240 CPUs (Cascade Lake microarchitecture) with 18 cores/CPU @ 2.6 GHz / 3.9 GHz Turbo, Total 36 physical cores (72 logical cores with hyperthreading)| 768 | OSA | 1.5 (Intel Cache) | 19.20 (NVMe) | Selected regions (*) |
21
+
| AV48 |Dual Intel Xeon Gold 6442Y CPUs (Sapphire Rapids microarchitecture) with 24 cores/CPU @ 2.6 GHz / 4.0 GHz Turbo, Total 48 physical cores (96 logical cores with hyperthreading) | 1,024 | ESA | N/A | 25.6 (NVMe) | Selected regions (*) |
22
+
| AV52 |Dual Intel Xeon Platinum 8270 CPUs (Cascade Lake microarchitecture) with 26 cores/CPU @ 2.7 GHz / 4.0 GHz Turbo, Total 52 physical cores (104 logical cores with hyperthreading)| 1,536 | OSA | 1.5 (Intel Cache) | 38.40 (NVMe) | Selected regions (*) |
23
+
| AV64 |Dual Intel Xeon Platinum 8370C CPUs (Ice Lake microarchitecture) with 32 cores/CPU @ 2.8 GHz / 3.5 GHz Turbo, Total 64 physical cores (128 logical cores with hyperthreading) | 1,024 | OSA | 3.84 (NVMe) | 15.36 (NVMe) | Selected regions (**) |
24
24
25
25
An Azure VMware Solution cluster requires a minimum number of three hosts. You can use hosts of the same type only in a single Azure VMware Solution private cloud. Hosts used to build or scale clusters come from an isolated pool of hosts. Those hosts passed hardware tests and had all data securely deleted before being added to a cluster.
26
26
@@ -31,5 +31,3 @@ All of the preceding host types have 100-Gbps network interface throughput.
31
31
**AV64 prerequisite: An Azure VMware Solution private cloud deployed with AV36, AV36P, or AV52 is required before adding AV64.
32
32
33
33
***Raw is based on [International Standard of Units (SI)](https://en.wikipedia.org/wiki/International_System_of_Units) reported by disk manufacturers. Example: 1 TB Raw = 1000000000000 bytes. Space calculated by a computer in binary (1 TB binary = 1099511627776 bytes binary) equals 931.3 gigabytes converted from the raw decimal.
34
-
35
-
***ESA with AV64 only applies to Gen 2 deployments
Copy file name to clipboardExpand all lines: articles/iot-edge/development-environment.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -52,7 +52,7 @@ The Azure IoT Edge extension for Visual Studio Code provides IoT Edge module tem
52
52
53
53
For more information and to download, see [Azure IoT Edge for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=vsciot-vscode.azure-iot-edge).
54
54
55
-
In addition to the IoT Edge extensions, you might find it helpful to install other extensions for developing. For example, you can use [Docker for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=PeterJausovec.vscode-docker) to manage your images, containers, and registries. Additionally, all the major supported languages have extensions for Visual Studio Code that can help when you're developing modules.
55
+
In addition to the IoT Edge extensions, you might find it helpful to install other extensions for developing. For example, you can use [Docker for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker) to manage your images, containers, and registries. Additionally, all the major supported languages have extensions for Visual Studio Code that can help when you're developing modules.
56
56
57
57
The [Azure IoT Hub](https://marketplace.visualstudio.com/items?itemName=vsciot-vscode.azure-iot-toolkit) extension is useful as a companion for the Azure IoT Edge extension.
Copy file name to clipboardExpand all lines: articles/iot-edge/how-to-deploy-modules-portal.md
-2Lines changed: 0 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -110,8 +110,6 @@ Review your deployment information, then select **Create**.
110
110
111
111
Once you deploy modules to your device, you can view all of them in the device details page of your IoT hub. This page displays the name of each deployed module, and useful information like the deployment status and exit code.
112
112
113
-
Select **Next: Routes** and continue with deployment as described by [Specify routes](#specify-routes) and [Review deployment](#review-deployment) earlier in this article.
114
-
115
113
## Next steps
116
114
117
115
Learn how to [Deploy IoT Edge modules at scale using the Azure portal](how-to-deploy-at-scale.md).
Copy file name to clipboardExpand all lines: articles/iot-hub/iot-hub-devguide-endpoints.md
+25-12Lines changed: 25 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,8 @@ author: cwatson-cat
5
5
ms.author: cwatson
6
6
ms.service: azure-iot-hub
7
7
ms.topic: concept-article
8
-
ms.date: 12/03/2024
8
+
ms.date: 02/19/2026
9
+
ai-usage: ai-assisted
9
10
ms.custom: [amqp, mqtt, 'Role: Cloud Development', 'Role: System Architecture']
10
11
---
11
12
@@ -17,7 +18,7 @@ Azure IoT Hub exposes various endpoints to support the devices and services that
17
18
18
19
## IoT Hub names
19
20
20
-
You can find the hostname of an IoT hub in the Azure portal, on your IoT hub's **Overview**working pane. By default, the DNS name of an IoT hub looks like the following example:
21
+
You can find the hostname of an IoT hub in the Azure portal, on your IoT hub's **Overview** pane. By default, the DNS name of an IoT hub looks like the following example:
21
22
22
23
`{your iot hub name}.azure-devices.net`
23
24
@@ -61,7 +62,7 @@ The following list describes the endpoints:
61
62
62
63
The [Azure IoT Hub SDKs](iot-hub-devguide-sdks.md) article describes the various ways to access these endpoints.
63
64
64
-
All IoT Hub endpoints use the [TLS](https://tools.ietf.org/html/rfc5246) protocol, and no endpoint is ever exposed on unencrypted/unsecured channels.
65
+
All IoT Hub endpoints use the [TLS](https://tools.ietf.org/html/rfc5246) protocol, and no endpoint is ever exposed on unencrypted or unsecured channels.
65
66
66
67
67
68
## Custom endpoints for message routing
@@ -80,19 +81,25 @@ For the limits on endpoints per hub, see [Quotas and throttling](iot-hub-devguid
80
81
81
82
### Built-in endpoint
82
83
83
-
You can use standard [Event Hubs integration and SDKs](iot-hub-devguide-messages-read-builtin.md) to receive device-to-cloud messages from the built-in endpoint (**messages/events**). Once any route is created, data stops flowing to the built-in endpoint unless a route is created to the built-in endpoint. Even if no routes are created, a fallback route must be enabled to route messages to the built-in endpoint. The fallback is enabled by default if you create your hub using the portal or the CLI.
84
+
You can use standard [Event Hubs integration and SDKs](iot-hub-devguide-messages-read-builtin.md) to receive device-to-cloud messages from the built-in endpoint (**messages/events**). Once you create any route, data stops flowing to the built-in endpoint unless a route is created to that endpoint. Even if you don't create any routes, you must enable a fallback route to route messages to the built-in endpoint. The fallback is enabled by default if you create your hub by using the portal or the CLI.
85
+
86
+
The message payload isn't base64 encoded at the built-in endpoint.
84
87
85
88
### Azure Storage as a routing endpoint
86
89
87
-
There are two storage services IoT Hub can route messages to: [Azure Blob Storage](../storage/blobs/storage-blobs-introduction.md) and [Azure Data Lake Storage Gen2](../storage/blobs/data-lake-storage-introduction.md) (ADLS Gen2) accounts. Both of these use blobs for their storage. To use Azure Data Lake Gen2, your storage account must have hierarchical namespaces enabled. For more information, see [Create a storage account to use with Azure Data Lake Storage](../storage/blobs/create-data-lake-storage-account.md).
90
+
IoT Hub can route messages to two storage services: [Azure Blob Storage](../storage/blobs/storage-blobs-introduction.md) and [Azure Data Lake Storage Gen2](../storage/blobs/data-lake-storage-introduction.md) (ADLS Gen2) accounts. Both of these services use blobs for their storage. To use Azure Data Lake Gen2, your storage account must have hierarchical namespaces enabled. For more information, see [Create a storage account to use with Azure Data Lake Storage](../storage/blobs/create-data-lake-storage-account.md).
91
+
92
+
IoT Hub supports writing data to Azure Storage in the [Apache Avro](https://avro.apache.org/) format and the JSON format. The default format is Avro. To use JSON encoding, set the `contentType` property to **application/json** and the `contentEncoding` property to **UTF-8** in the message [system properties](iot-hub-devguide-routing-query-syntax.md#system-properties). Both of these values are case-insensitive.
93
+
94
+
If you don't set the necessary system properties, IoT Hub applies base64 encoding. To avoid base64 encoding, set both the `contentType` property to **application/json** and the `contentEncoding` property to **UTF-8** in the message system properties. If these properties aren't set, IoT Hub writes the messages in base64 encoded format.
88
95
89
-
IoT Hub supports writing data to Azure Storage in the [Apache Avro](https://avro.apache.org/)format and the JSON format. The default is AVRO. To use JSON encoding, set the contentType property to **application/json** and contentEncoding property to **UTF-8** in the message [system properties](iot-hub-devguide-routing-query-syntax.md#system-properties). Both of these values are case-insensitive. If the content encoding isn't set, then IoT Hub writes the messages in base 64 encoded format.
96
+
You can set the encoding format only when you configure the blob storage endpoint. You can't edit the encoding format for an existing endpoint.
90
97
91
-
The encoding format can be set only when the blob storage endpoint is configured; it can't be edited for an existing endpoint.
98
+
IoT Hub batches messages and writes data to storage whenever the batch reaches a certain size or a certain amount of time elapses. IoT Hub defaults to the following file naming convention: `{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}`.
92
99
93
-
IoT Hub batches messages and writes data to storage whenever the batch reaches a certain size or a certain amount of time elapses. IoT Hub defaults to the following file naming convention: `{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}`. You can use any file naming convention, but you must use all listed tokens. IoT Hub writes to an empty blob if there's no data to write.
100
+
You can use any file naming convention, but you must use all listed tokens. IoT Hub writes to an empty blob if there's no data to write.
94
101
95
-
We recommend listing the blobs or files and then iterating over them, to ensure that all blobs or files are read without making any assumptions of partition. The partition range could potentially change during a Microsoft-initiated failover or IoT Hub manual failover. You can use the [List Blobs API](/rest/api/storageservices/list-blobs) to enumerate the list of blobs or [List ADLS Gen2 API](/rest/api/storageservices/datalakestoragegen2/path) for the list of files. For example:
102
+
To ensure that all blobs or files are read without making any assumptions about partition, list the blobs or files and then iterate over them. The partition range could potentially change during a Microsoft-initiated failover or IoT Hub manual failover. You can use the [List Blobs API](/rest/api/storageservices/list-blobs) to enumerate the list of blobs or [List ADLS Gen2 API](/rest/api/storageservices/datalakestoragegen2/path) for the list of files. For example:
@@ -112,15 +119,21 @@ public void ListBlobsInContainer(string containerName, string iothub)
112
119
113
120
### Service Bus queues and Service Bus topics as a routing endpoint
114
121
115
-
Service Bus queues and topics used as IoT Hub endpoints must not have **Sessions** or **Duplicate Detection** enabled. If either of those options are enabled, the endpoint appears as **Unreachable** in the Azure portal.
122
+
Service Bus queues and topics that you use as IoT Hub endpoints must not have **Sessions** or **Duplicate Detection** enabled. If you enable either of those options, the endpoint appears as **Unreachable** in the Azure portal.
123
+
124
+
Base64 encoding never happens when routing to Service Bus queues or topics. Messages are written as-is to the endpoint.
116
125
117
126
### Event Hubs as a routing endpoint
118
127
119
-
Apart from the built-in-Event Hubs compatible endpoint, you can also route data to custom endpoints of type Event Hubs.
128
+
Apart from the built-in Event Hubs compatible endpoint, you can also route data to custom endpoints of type Event Hubs.
129
+
130
+
Base64 encoding never happens when routing to custom Event Hubs endpoints. Messages are written as-is to the endpoint.
120
131
121
132
### Azure Cosmos DB as a routing endpoint
122
133
123
-
You can send data directly to Azure Cosmos DB from IoT Hub. IoT Hub supports writing to Cosmos DB in JSON (if specified in the message content-type) or as base 64 encoded binary.
134
+
You can send data directly to Azure Cosmos DB from IoT Hub. IoT Hub supports writing to Cosmos DB in JSON (if specified in the message content-type) or as base64 encoded binary.
135
+
136
+
Base64 encoding is applied if the necessary system properties aren't set. To write as JSON, set the `contentType` property to **application/json** and the `contentEncoding` property to **UTF-8** in the message system properties. If these properties aren't set, data is base64 encoded when written to Cosmos DB.
124
137
125
138
To support high-scale scenarios, you can enable [synthetic partition keys](/azure/cosmos-db/synthetic-partition-keys) for the Cosmos DB endpoint. As Cosmos DB is a hyperscale data store, all data/documents written to it must contain a field that represents a logical partition. Each logical partition has a maximum size of 20 GB. You can specify the partition key property name in **Partition key name**. The partition key property name is defined at the container level and can't be updated.
description: This developer guide discusses how to use cloud-to-device messaging with your IoT hub. It includes information about the message life cycle and configuration options.
4
4
author: cwatson-cat
5
-
6
5
ms.author: cwatson
7
6
ms.service: azure-iot-hub
8
7
ms.topic: concept-article
9
-
ms.date: 06/25/2025
8
+
ms.date: 02/11/2026
10
9
ms.custom: mqtt, devx-track-azurecli
10
+
ai-usage: ai-assisted
11
11
---
12
12
13
13
# Understand cloud-to-device messaging from an IoT hub
@@ -43,7 +43,19 @@ A device can also:
43
43
44
44
A thread could fail to process a message without notifying the IoT hub. In this case, messages automatically transition from the *Invisible* state back to the *Enqueued* state after a visibility timeout (or lock timeout). The length of this timeout is one minute and can't be changed.
45
45
46
-
The **max delivery count** property on the IoT hub determines the maximum number of times a message can transition between the *Enqueued* and *Invisible* states. After that number of transitions, the IoT hub sets the state of the message to *Dead lettered*. Similarly, the IoT hub sets the state of a message to *Dead lettered* after its expiration time.
46
+
The **max delivery count** property on the IoT hub applies only when a device explicitly abandons a message. Each explicit abandon transitions a message from *Invisible* back to *Enqueued* and increments the delivery count. If the lock expires, the message returns to *Enqueued* but the delivery count does not increment. After the delivery count reaches the max, the IoT hub sets the message state to *Dead lettered*. The IoT hub also sets a message to *Dead lettered* after its expiration time.
47
+
48
+
### Understanding delivery count behavior
49
+
50
+
IoT Hub increments the delivery count only when your device explicitly abandons a message. If a message lock expires without explicit completion, rejection, or abandonment, the message returns to the queue without incrementing the delivery count. This behavior means that messages might be redelivered more times than the configured max delivery count.
51
+
52
+
To avoid unexpected message redelivery behavior, consider the following guidance when you design your device code:
53
+
54
+
* Design your device code to explicitly abandon messages that can't be processed successfully.
55
+
* Monitor message lock timeouts and handle them appropriately in your application logic.
56
+
* Consider implementing retry logic that explicitly abandons messages after a certain number of local processing attempts.
57
+
58
+
Without explicit abandonment, messages continue cycling between the Enqueued and Invisible states indefinitely until they expire based on time-to-live.
47
59
48
60
A device ordinarily completes a cloud-to-device message when the loss of the message doesn't affect the application logic. An example of this completion might be when the device persists the message content locally or successfully executes an operation. The message could also carry transient information, whose loss wouldn't impact the functionality of the application. Sometimes, for long-running tasks, you can:
0 commit comments