Foundational capabilities
Comparison CriteriaStorage queuesService Bus queues
Ordering guaranteeNo

For more information, see the first note in the Additional Information section.

Yes - First-In-First-Out (FIFO)

(by using message sessions)
Delivery guaranteeAt-Least-OnceAt-Least-Once (using PeekLock receive mode. It’s the default)

At-Most-Once (using ReceiveAndDelete receive mode)

Learn more about various Receive modes
Atomic operation supportNoYes



Receive behaviorNon-blocking

(completes immediately if no new message is found)
Blocking with or without a timeout

(offers long polling, or the “Comet technique”)

Non-blocking

(using .NET managed API only)

Push-style APINoYes

Our .NET, Java, JavaScript, and Go SDKs provide push-style API.

Receive modePeek & LeasePeek & Lock

Receive & Delete
Exclusive access modeLease-basedLock-based
Lease/Lock duration30 seconds (default)

7 days (maximum) (You can renew or release a message lease using the UpdateMessage API.)
30 seconds (default)

You can renew the message lock for the same lock duration each time manually or use the automatic lock renewal feature where the client manages lock renewal for you.

Lease/Lock precisionMessage level

Each message can have a different timeout value, which you can then update as needed while processing the message, by using the UpdateMessage API.
Queue level

(each queue has a lock precision applied to all of its messages, but the lock can be renewed as described in the previous row)

Batched receiveYes

(explicitly specifying message count when retrieving messages, up to a maximum of 32 messages)
Yes

(implicitly enabling a pre-fetch property or explicitly by using transactions)

Batched sendNoYes

(by using transactions or client-side batching)