| Comparison Criteria | Storage queues | Service Bus queues |
|---|---|---|
| Ordering guarantee | No For more information, see the first note in the Additional Information section. | Yes - First-In-First-Out (FIFO) (by using message sessions) |
| Delivery guarantee | At-Least-Once | At-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 support | No | Yes |
| Receive behavior | Non-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 API | No | Yes Our .NET, Java, JavaScript, and Go SDKs provide push-style API. |
| Receive mode | Peek & Lease | Peek & Lock Receive & Delete |
| Exclusive access mode | Lease-based | Lock-based |
| Lease/Lock duration | 30 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 precision | Message 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 receive | Yes (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 send | No | Yes (by using transactions or client-side batching) |
Loading

