> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tensor9.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SQS (Standard)

> AWS SQS (Standard). Standard queues accept messages at effectively unlimited throughput but deliver at least once and may reorder or duplicate them.

**On this page**

* [Coverage by target cloud](#coverage-by-target-cloud)
* [How the targets compare](#how-the-targets-compare)
  * [Max adaptation](#max-adaptation)
* [On Google Cloud](#on-google-cloud)
  * [Via Pub/Sub](#via-pub/sub)
  * [Via Cloud SQL for PostgreSQL](#via-cloud-sql-for-postgresql)
* [On Azure, OCI, and Private Kubernetes](#on-azure-oci-and-private-kubernetes)
  * [Via CloudNativePG](#via-cloudnativepg)
* [On Azure](#on-azure)
  * [Via Azure Queue Storage](#via-azure-queue-storage)
  * [Via Azure Service Bus](#via-azure-service-bus)
  * [Via Azure Cosmos DB (queue)](#via-azure-cosmos-db-queue)
  * [Via PostgreSQL Flexible Server](#via-postgresql-flexible-server)
* [On OCI](#on-oci)
  * [Via OCI Queue](#via-oci-queue)

## Coverage by target cloud

| Target             | Available |
| ------------------ | --------- |
| Google Cloud       | ✓         |
| Azure              | ✓         |
| OCI                | ✓         |
| Private Kubernetes | ✓         |

## How the targets compare

Each row compares a capability of SQS (Standard) with its adaptation on each target.
A dash means this row is not stated for that target.

### Max adaptation

| Capability                                      | SQS (Standard)                         | Google Cloud · Pub/Sub                                                     | Google Cloud · Cloud SQL for PostgreSQL                                | Azure, OCI, and Private Kubernetes · CloudNativePG                     | Azure · Azure Queue Storage                                       | Azure · Azure Service Bus                                                                            | Azure · Azure Cosmos DB (queue)                                                   | Azure · PostgreSQL Flexible Server                                                                                                                                                     | OCI · OCI Queue                                                        |
| ----------------------------------------------- | -------------------------------------- | -------------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| Delivery guarantee                              | at-least-once (standard)               | at-least-once (StreamingPull + ack)                                        | at-least-once, best-effort order                                       | at-least-once, best-effort order                                       | at-least-once (visibility + pop\_receipt)                         | at-least-once (PeekLock)                                                                             | at-least-once, best-effort order                                                  | at-least-once, best-effort order                                                                                                                                                       | at-least-once, best-effort order                                       |
| Dead-letter                                     | Yes - native redrive (maxReceiveCount) | Yes - native dead-letter topic (max\_delivery\_attempts)                   | Yes - native redrive (maxReceiveCount)                                 | Yes - native redrive (maxReceiveCount)                                 | Partial - application-managed dead-letter delivery                | Yes - native DLQ (delivery-count limit)                                                              | Yes - moved into the declared DLQ container at claim time (at-least-once)         | Yes - native redrive (maxReceiveCount)                                                                                                                                                 | Partial - delivery-count redrive (OCI Queue's count-based dead-letter) |
| Visibility timeout · max hold                   | up to 12 h                             | 10-600 s queue default; per-message 0 also accepted; other values rejected | 30 s default; no broker lock-duration cap, but retention still applies | 30 s default; no broker lock-duration cap, but retention still applies | per-message (set on each message)                                 | ≤ 5 min (PeekLock cap; longer is rejected with an error)                                             | uncapped (not a broker lock; extends via ChangeMessageVisibility with no ceiling) | 30 s default; no broker lock-duration cap, but retention still applies                                                                                                                 | 30 s default (OCI Queue), honored and extendable per message           |
| Receipt handle · restart durability             | stateless, durable                     | ack-id (broker; stream-scoped, not restart-durable)                        | a durable handle that survives an adapter restart                      | a durable handle that survives an adapter restart                      | pop\_receipt: stateless and durable (survives an adapter restart) | broker lock (not restart-durable)                                                                    | stateless data; survives an adapter restart, with no broker lock behind it        | a durable handle that survives an adapter restart                                                                                                                                      | present (resolves by receipt handle)                                   |
| Max message size · per message                  | 1 MiB                                  | 256 KiB adapter default; declared limit enforced                           | 256 KB                                                                 | 256 KB                                                                 | \~48 KiB raw (64 KiB wire, base64)                                | 256 KB                                                                                               | 256 KB (well under the 2 MB Cosmos document cap)                                  | 256 KB                                                                                                                                                                                 | 128 KB (OCI Queue's ceiling; SQS is 1 MiB)                             |
| Long-polling · receive wait                     | up to 20 s                             | native StreamingPull (no poll floor)                                       | bounded by WaitTimeSeconds (poll loop)                                 | bounded by WaitTimeSeconds (poll loop)                                 | client poll (no native long-poll)                                 | native max-wait ≤ 20 s                                                                               | poll (claim on receive)                                                           | bounded by WaitTimeSeconds (poll loop)                                                                                                                                                 | native long-poll on receive                                            |
| Message retention · message lifetime            | up to 14 d                             | SQS-settable: 10 min-14 d; shorter values rejected                         | retention enforced on message age (60 s..14 d)                         | retention enforced on message age (60 s..14 d)                         | up to 14 d (7 d native default)                                   | native setting provisioned through Terraform; Max returns declared retention, not a live broker read | native per-item Cosmos TTL                                                        | retention enforced on message age (60 s..14 d)                                                                                                                                         | up to 7 d (OCI Queue maximum); SQS 4 d default emitted explicitly      |
| API coverage                                    | full                                   | high                                                                       | high                                                                   | high                                                                   | high                                                              | high                                                                                                 | high                                                                              | high                                                                                                                                                                                   | high                                                                   |
| Durability · cluster-rebuild survival           | SQS: managed, cross-AZ                 | -                                                                          | -                                                                      | -                                                                      | -                                                                 | -                                                                                                    | -                                                                                 | queue data is stored on the managed Flexible Server outside the appliance cluster and survives a cluster rebuild                                                                       | -                                                                      |
| Shared-server tenancy · shared database         | dedicated SQS                          | -                                                                          | -                                                                      | -                                                                      | -                                                                 | -                                                                                                    | -                                                                                 | one shared Flexible Server + one shared database per appliance; every SQS queue on the appliance co-locates as a table-per-queue in that database, with no cross-appliance co-location | -                                                                      |
| Server size · SKU / storage default             | AWS-managed capacity                   | -                                                                          | -                                                                      | -                                                                      | -                                                                 | -                                                                                                    | -                                                                                 | uses a fixed default server size and storage allocation because an SQS queue declares no source instance size                                                                          | -                                                                      |
| Maintenance and shared capacity · shared server | per-queue isolation                    | -                                                                          | -                                                                      | -                                                                      | -                                                                 | -                                                                                                    | -                                                                                 | the shared server has one maintenance window and shared compute, so a heavy queue can affect neighbors on the same appliance server (the shared-server tradeoff)                       | -                                                                      |

## On Google Cloud

### Via Pub/Sub

| Operation                      | Area           | Support   | Depth        | Notes                                                                                                                                      |
| ------------------------------ | -------------- | --------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
| Dead-letter redrive            | Dead-letter    | Supported | Most usage   | native dead-letter topic; maxReceiveCount maps to an approximate 5-100-attempt threshold; forwarding requires the policy's IAM permissions |
| Message attributes             | Messages       | Supported | Common       | -                                                                                                                                          |
| SetQueueAttributes (retention) | Queues         | Partial   | Full surface | sets subscription retention from 10 minutes through 14 days; shorter SQS retention values are rejected                                     |
| DeleteMessage                  | Send / receive | Supported | Common       | ack on delete; a stale receipt handle no-ops                                                                                               |
| Long-polling                   | Send / receive | Supported | Most usage   | native StreamingPull, without a repeated-poll interval                                                                                     |
| ReceiveMessage                 | Send / receive | Supported | Common       | native StreamingPull                                                                                                                       |
| SendMessage                    | Send / receive | Supported | Common       | publishes to a topic; each queue also has a pull subscription; MD5 checksums recomputed for your SDK                                       |
| ChangeMessageVisibility        | Visibility     | Partial   | Common       | maps to modifyAckDeadline; accepts 10-600 s, plus 0 for immediate redelivery; other values are rejected                                    |

#### How it works

Tensor9 adds an adapter, a proxy process, to your application pod in the customer's Google Cloud environment. It sets `AWS_ENDPOINT_URL_SQS` to the adapter's loopback address. Your application keeps its `SendMessage` and `ReceiveMessage` calls; the adapter translates them to Pub/Sub operations and returns SQS responses, including error codes and recomputed MD5 checksums for the body and attributes.

Each standard SQS queue maps to a Pub/Sub topic for sending and a subscription for receiving: queue `q` becomes topic `q` and subscription `q-sub`. The body is stored as Pub/Sub message data. Attributes preserve their type, string and binary values in the Pub/Sub attribute map and are reconstructed as SQS attributes on receive. Pub/Sub stores queue metadata and tracks receipt handles. This target supports standard queues; FIFO ordering and deduplication require another target.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg2IiB2aWV3Qm94PSIwIDAgODM2IDE4NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24ncyBTUVMgU0RLIGNhbGxzIEFtYXpvbiBTUVMuIEFmdGVyOiBpbiBHb29nbGUgQ2xvdWQgdGhlIHNhbWUgYXBwbGljYXRpb24gYW5kIFNESyBjYWxsIGEgVGVuc29yOSBhZGFwdGVyLCB3aGljaCBzZXJ2ZXMgdGhlIFNRUyBBUEkgZnJvbSBHb29nbGUgUHViL1N1Yiwgd2hlcmUgYW4gU1FTIHF1ZXVlIHEgYmVjb21lcyBhIFB1Yi9TdWIgdG9waWMgcSBwbHVzIGEgc3Vic2NyaXB0aW9uIHEtc3ViLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0icDFhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDYiIHdpZHRoPSIzNTgiIGhlaWdodD0iMTI0IiByeD0iMTQiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiM5NGEzYjgiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9IjgyIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iOTAiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMi41cHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI5MCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+U1FTIFNESzwvdGV4dD4KPGxpbmUgeDE9IjE1MCIgeTE9IjExNSIgeDI9IjIxMCIgeTI9IjExNSIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcDFhKSIvPgo8dGV4dCB4PSIxODEiIHk9IjEwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZTo4LjVweCI+U1FTIEFQSTwvdGV4dD4KPHJlY3QgeD0iMjE0IiB5PSI4MiIgd2lkdGg9IjE0OCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI4OCIgeT0iMTEyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPkFtYXpvbiBTUVM8L3RleHQ+Cjx0ZXh0IHg9IjI4OCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+QVdTLW1hbmFnZWQ8L3RleHQ+CjxsaW5lIHgxPSI0MTgiIHkxPSI0MCIgeDI9IjQxOCIgeTI9IjE2NiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8cmVjdCB4PSI0NjIiIHk9IjQ2IiB3aWR0aD0iMzYyIiBoZWlnaHQ9IjEyNCIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iNDc2IiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+T04gR09PR0xFIENMT1VEPC90ZXh0Pgo8cmVjdCB4PSI0NzQiIHk9IjgyIiB3aWR0aD0iODgiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI1MTgiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iNTE4IiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA1OTY2OSI+c2FtZSBTREs8L3RleHQ+CjxsaW5lIHgxPSI1NjIiIHkxPSIxMTUiIHgyPSI1ODQiIHkyPSIxMTUiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3AxYSkiLz4KPHJlY3QgeD0iNTg4IiB5PSI3OCIgd2lkdGg9IjEwOCIgaGVpZ2h0PSI3NCIgcng9IjExIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjY0MiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPlRlbnNvcjk8L3RleHQ+Cjx0ZXh0IHg9IjY0MiIgeT0iMTE5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5zZXJ2aWNlPC90ZXh0Pgo8dGV4dCB4PSI2NDIiIHk9IjEzMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+YWRhcHRlcjwvdGV4dD4KPGxpbmUgeDE9IjY5NiIgeTE9IjExNSIgeDI9IjcxOCIgeTI9IjExNSIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcDFhKSIvPgo8cmVjdCB4PSI3MjIiIHk9IjgyIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzcyIiB5PSIxMDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTAuNXB4Ij5Hb29nbGUgUHViL1N1YjwvdGV4dD4KPHRleHQgeD0iNzcyIiB5PSIxMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj50b3BpYyBxPC90ZXh0Pgo8dGV4dCB4PSI3NzIiIHk9IjEzOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPisgc3ViIHEtc3ViPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS the application's SQS SDK calls Amazon SQS. After: in Google Cloud the same application and SDK call a Tensor9 adapter, which serves the SQS API from Google Pub/Sub, where an SQS queue q becomes a Pub/Sub topic q plus a subscription q-sub." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg2IiB2aWV3Qm94PSIwIDAgODM2IDE4NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24ncyBTUVMgU0RLIGNhbGxzIEFtYXpvbiBTUVMuIEFmdGVyOiBpbiBHb29nbGUgQ2xvdWQgdGhlIHNhbWUgYXBwbGljYXRpb24gYW5kIFNESyBjYWxsIGEgVGVuc29yOSBhZGFwdGVyLCB3aGljaCBzZXJ2ZXMgdGhlIFNRUyBBUEkgZnJvbSBHb29nbGUgUHViL1N1Yiwgd2hlcmUgYW4gU1FTIHF1ZXVlIHEgYmVjb21lcyBhIFB1Yi9TdWIgdG9waWMgcSBwbHVzIGEgc3Vic2NyaXB0aW9uIHEtc3ViLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0icDFhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDYiIHdpZHRoPSIzNTgiIGhlaWdodD0iMTI0IiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI4MiIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjkwIiB5PSIxMTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iOTAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPlNRUyBTREs8L3RleHQ+CjxsaW5lIHgxPSIxNTAiIHkxPSIxMTUiIHgyPSIyMTAiIHkyPSIxMTUiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3AxYSkiLz4KPHRleHQgeD0iMTgxIiB5PSIxMDYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmb250LXNpemU6OC41cHgiPlNRUyBBUEk8L3RleHQ+CjxyZWN0IHg9IjIxNCIgeT0iODIiIHdpZHRoPSIxNDgiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyODgiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5BbWF6b24gU1FTPC90ZXh0Pgo8dGV4dCB4PSIyODgiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkFXUy1tYW5hZ2VkPC90ZXh0Pgo8bGluZSB4MT0iNDE4IiB5MT0iNDAiIHgyPSI0MTgiIHkyPSIxNjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHJlY3QgeD0iNDYyIiB5PSI0NiIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMjQiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5PTiBHT09HTEUgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjQ3NCIgeT0iODIiIHdpZHRoPSI4OCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUxOCIgeT0iMTEyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI1MTgiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM2Ij5zYW1lIFNESzwvdGV4dD4KPGxpbmUgeDE9IjU2MiIgeTE9IjExNSIgeDI9IjU4NCIgeTI9IjExNSIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcDFhKSIvPgo8cmVjdCB4PSI1ODgiIHk9Ijc4IiB3aWR0aD0iMTA4IiBoZWlnaHQ9Ijc0IiByeD0iMTEiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iNjQyIiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTJweCI+VGVuc29yOTwvdGV4dD4KPHRleHQgeD0iNjQyIiB5PSIxMTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPnNlcnZpY2U8L3RleHQ+Cjx0ZXh0IHg9IjY0MiIgeT0iMTMzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5hZGFwdGVyPC90ZXh0Pgo8bGluZSB4MT0iNjk2IiB5MT0iMTE1IiB4Mj0iNzE4IiB5Mj0iMTE1IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNwMWEpIi8+CjxyZWN0IHg9IjcyMiIgeT0iODIiIHdpZHRoPSIxMDAiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI3NzIiIHk9IjEwOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMC41cHgiPkdvb2dsZSBQdWIvU3ViPC90ZXh0Pgo8dGV4dCB4PSI3NzIiIHk9IjEyNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnRvcGljIHE8L3RleHQ+Cjx0ZXh0IHg9Ijc3MiIgeT0iMTM4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+KyBzdWIgcS1zdWI8L3RleHQ+Cjwvc3ZnPg==" alt="Before: on AWS the application's SQS SDK calls Amazon SQS. After: in Google Cloud the same application and SDK call a Tensor9 adapter, which serves the SQS API from Google Pub/Sub, where an SQS queue q becomes a Pub/Sub topic q plus a subscription q-sub." />
</div>

<p className="t9-caption">An SQS queue q becomes a Pub/Sub topic q and subscription q-sub . The application calls the adapter through its existing SQS SDK.</p>

#### Architecture

The Rust adapter authenticates to Pub/Sub with the customer's Workload Identity, without static credentials. Pub/Sub stores durable messages. The Max queue catalog stores declared configuration; receive buffers and acknowledgement handles belong to each adapter process and do not survive a restart. Google operates Pub/Sub's durability, delivery and high availability; Tensor9 operates the adapter.

Per queue, the adapter keeps two long-lived structures. First, a **Publisher per topic**, created on the first send and held for the process lifetime: it feeds Pub/Sub's client-side batching layer, so concurrent sends to the same topic naturally coalesce into one `Publish` RPC rather than one RPC per `SendMessage`. Second, a **StreamingPull consumer per subscription**: a background task holds the subscription's message stream and forwards each received message into a **bounded in-process channel**, which `ReceiveMessage` drains, instead of issuing a blocking pull on every call. On `DeleteQueue` both are dropped; the consumer disposes its stream, which nacks any still-buffered messages so they redeliver promptly rather than waiting out the full deadline.

* **Pub/Sub stores durable state.** Messages remain in Pub/Sub when an adapter restarts; local buffers and stream-scoped acknowledgement handles do not. Unacknowledged messages can be redelivered.
* **Two limits control buffering.** Pub/Sub limits the number of delivered messages awaiting acknowledgement. The adapter separately limits its in-process receive buffer so idle consumers do not hold an unbounded number of messages whose acknowledgement deadlines are running.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjUwIiB2aWV3Qm94PSIwIDAgODM2IDI1MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcmNoaXRlY3R1cmU6IHRoZSBhcHAncyBTUVMgU0RLIGNhbGxzIGEgUnVzdCBUZW5zb3I5IGFkYXB0ZXIsIHdoaWNoIHNlcnZlcyB0aGUgU1FTIEFQSSBmcm9tIEdvb2dsZSBQdWIvU3ViIG92ZXIgYSBrZXlsZXNzIEdDUCBpZGVudGl0eS4gVGhlIGFkYXB0ZXIgYmF0Y2hlcyBzZW5kcyBwZXIgdG9waWMgYW5kIGRyYWlucyBhIGxvbmctbGl2ZWQgY29uc3VtZXIgcGVyIHN1YnNjcmlwdGlvbiBpbnRvIGEgc21hbGwgaW4tcHJvY2VzcyBidWZmZXIsIHNvIGEgcmVjZWl2ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGJ1ZmZlciBoYXMgYW4gZWxpZ2libGUgbWVzc2FnZS4gUHViL1N1YiBob2xkcyB0aGUgdG9waWMgcSBhbmQgdGhlIHN1YnNjcmlwdGlvbiBxLXN1YiwgYW5kIGtlZXBzIGEgYm91bmRlZCBudW1iZXIgb2YgbWVzc2FnZXMgb3V0c3RhbmRpbmcuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJwMmEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8L2RlZnM+CjxyZWN0IHg9IjgiIHk9IjM0IiB3aWR0aD0iODIwIiBoZWlnaHQ9IjIwOCIgcng9IjE2IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMjYiIHk9IjU0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiOCI+Q1VTVE9NRVInUyBHT09HTEUgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxMTIiIHdpZHRoPSI5MiIgaGVpZ2h0PSI4NCIgcng9IjEyIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjcwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjcwIiB5PSIxNjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5TUVMgU0RLPC90ZXh0Pgo8dGV4dCB4PSI3MCIgeT0iMTgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNTk2NjkiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjExNiIgeTE9IjE1NCIgeDI9IjE0NiIgeTI9IjE1NCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcDJhKSIvPgo8cmVjdCB4PSIxNDgiIHk9IjkyIiB3aWR0aD0iMTg0IiBoZWlnaHQ9IjEyNCIgcng9IjEyIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjI0MCIgeT0iMTEyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEzcHgiPlRlbnNvcjkgbGF5ZXI8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMTI3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5SdXN0IMK3IHdvcmtsb2FkIGlkZW50aXR5PC90ZXh0Pgo8cmVjdCB4PSIxNTgiIHk9IjEzOCIgd2lkdGg9IjE2NCIgaGVpZ2h0PSIzMiIgcng9IjgiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMjQwIiB5PSIxNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+YmF0Y2hlcyBzZW5kczwvdGV4dD4KPHRleHQgeD0iMjQwIiB5PSIxNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiMwNDc4NTciPmNvYWxlc2NlcyBjb25jdXJyZW50IHNlbmRzPC90ZXh0Pgo8cmVjdCB4PSIxNTgiIHk9IjE3NiIgd2lkdGg9IjE2NCIgaGVpZ2h0PSIzMiIgcng9IjgiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMjQwIiB5PSIxODkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+bG9uZy1saXZlZCBjb25zdW1lcjwvdGV4dD4KPHRleHQgeD0iMjQwIiB5PSIyMDIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiMwNDc4NTciPuKGkiBzbWFsbCBpbi1wcm9jZXNzIGJ1ZmZlcjwvdGV4dD4KPGxpbmUgeDE9IjMzMiIgeTE9IjE1NCIgeDI9IjM2OCIgeTI9IjE1NCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcDJhKSIvPgo8dGV4dCB4PSIzNTAiIHk9IjE0NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGIiPmdSUEM8L3RleHQ+Cjx0ZXh0IHg9IjM1MCIgeT0iMTY4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YiI+a2V5bGVzczwvdGV4dD4KPHJlY3QgeD0iMzcyIiB5PSI3MCIgd2lkdGg9IjQ0OCIgaGVpZ2h0PSIxNjQiIHJ4PSIxMyIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNiIvPgo8dGV4dCB4PSI1OTYiIHk9IjkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPkdvb2dsZSBQdWIvU3ViIMK3IEdvb2dsZS1tYW5hZ2VkIGR1cmFiaWxpdHkgKyBIQTwvdGV4dD4KPHJlY3QgeD0iMzg4IiB5PSIxMDQiIHdpZHRoPSIyMDIiIGhlaWdodD0iMTE0IiByeD0iMTAiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNDg5IiB5PSIxNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMDtmaWxsOiM0NzU1NjkiPnRvcGljOiBxPC90ZXh0Pgo8dGV4dCB4PSI0ODkiIHk9IjE2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnNlbmRzIHB1Ymxpc2hlZCBoZXJlPC90ZXh0Pgo8dGV4dCB4PSI0ODkiIHk9IjE4NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmRhdGEgKyBhdHRyaWJ1dGVzIHByZXNlcnZlZDwvdGV4dD4KPHJlY3QgeD0iNjAyIiB5PSIxMDQiIHdpZHRoPSIyMDQiIGhlaWdodD0iMTE0IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNzA0IiB5PSIxNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+c3Vic2NyaXB0aW9uOiBxLXN1YjwvdGV4dD4KPHRleHQgeD0iNzA0IiB5PSIxNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPlN0cmVhbWluZ1B1bGw8L3RleHQ+Cjx0ZXh0IHg9IjcwNCIgeT0iMTg2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5ib3VuZGVkIG1lc3NhZ2VzIG91dHN0YW5kaW5nPC90ZXh0Pgo8L3N2Zz4=" alt="Architecture: the app's SQS SDK calls a Rust Tensor9 adapter, which serves the SQS API from Google Pub/Sub over a keyless GCP identity. The adapter batches sends per topic and drains a long-lived consumer per subscription into a small in-process buffer, so a receive can return immediately when the buffer has an eligible message. Pub/Sub holds the topic q and the subscription q-sub, and keeps a bounded number of messages outstanding." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjUwIiB2aWV3Qm94PSIwIDAgODM2IDI1MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcmNoaXRlY3R1cmU6IHRoZSBhcHAncyBTUVMgU0RLIGNhbGxzIGEgUnVzdCBUZW5zb3I5IGFkYXB0ZXIsIHdoaWNoIHNlcnZlcyB0aGUgU1FTIEFQSSBmcm9tIEdvb2dsZSBQdWIvU3ViIG92ZXIgYSBrZXlsZXNzIEdDUCBpZGVudGl0eS4gVGhlIGFkYXB0ZXIgYmF0Y2hlcyBzZW5kcyBwZXIgdG9waWMgYW5kIGRyYWlucyBhIGxvbmctbGl2ZWQgY29uc3VtZXIgcGVyIHN1YnNjcmlwdGlvbiBpbnRvIGEgc21hbGwgaW4tcHJvY2VzcyBidWZmZXIsIHNvIGEgcmVjZWl2ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGJ1ZmZlciBoYXMgYW4gZWxpZ2libGUgbWVzc2FnZS4gUHViL1N1YiBob2xkcyB0aGUgdG9waWMgcSBhbmQgdGhlIHN1YnNjcmlwdGlvbiBxLXN1YiwgYW5kIGtlZXBzIGEgYm91bmRlZCBudW1iZXIgb2YgbWVzc2FnZXMgb3V0c3RhbmRpbmcuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJwMmEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8L2RlZnM+CjxyZWN0IHg9IjgiIHk9IjM0IiB3aWR0aD0iODIwIiBoZWlnaHQ9IjIwOCIgcng9IjE2IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMjYiIHk9IjU0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiOCI+Q1VTVE9NRVInUyBHT09HTEUgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxMTIiIHdpZHRoPSI5MiIgaGVpZ2h0PSI4NCIgcng9IjEyIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjcwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjcwIiB5PSIxNjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5TUVMgU0RLPC90ZXh0Pgo8dGV4dCB4PSI3MCIgeT0iMTgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjExNiIgeTE9IjE1NCIgeDI9IjE0NiIgeTI9IjE1NCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcDJhKSIvPgo8cmVjdCB4PSIxNDgiIHk9IjkyIiB3aWR0aD0iMTg0IiBoZWlnaHQ9IjEyNCIgcng9IjEyIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjI0MCIgeT0iMTEyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEzcHgiPlRlbnNvcjkgbGF5ZXI8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMTI3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5SdXN0IMK3IHdvcmtsb2FkIGlkZW50aXR5PC90ZXh0Pgo8cmVjdCB4PSIxNTgiIHk9IjEzOCIgd2lkdGg9IjE2NCIgaGVpZ2h0PSIzMiIgcng9IjgiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMjQwIiB5PSIxNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+YmF0Y2hlcyBzZW5kczwvdGV4dD4KPHRleHQgeD0iMjQwIiB5PSIxNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBkZWM4Ij5jb2FsZXNjZXMgY29uY3VycmVudCBzZW5kczwvdGV4dD4KPHJlY3QgeD0iMTU4IiB5PSIxNzYiIHdpZHRoPSIxNjQiIGhlaWdodD0iMzIiIHJ4PSI4IiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjI0MCIgeT0iMTg5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPmxvbmctbGl2ZWQgY29uc3VtZXI8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMjAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzkwZGVjOCI+4oaSIHNtYWxsIGluLXByb2Nlc3MgYnVmZmVyPC90ZXh0Pgo8bGluZSB4MT0iMzMyIiB5MT0iMTU0IiB4Mj0iMzY4IiB5Mj0iMTU0IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNwMmEpIi8+Cjx0ZXh0IHg9IjM1MCIgeT0iMTQ2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkOCI+Z1JQQzwvdGV4dD4KPHRleHQgeD0iMzUwIiB5PSIxNjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij5rZXlsZXNzPC90ZXh0Pgo8cmVjdCB4PSIzNzIiIHk9IjcwIiB3aWR0aD0iNDQ4IiBoZWlnaHQ9IjE2NCIgcng9IjEzIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjU5NiIgeT0iOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+R29vZ2xlIFB1Yi9TdWIgwrcgR29vZ2xlLW1hbmFnZWQgZHVyYWJpbGl0eSArIEhBPC90ZXh0Pgo8cmVjdCB4PSIzODgiIHk9IjEwNCIgd2lkdGg9IjIwMiIgaGVpZ2h0PSIxMTQiIHJ4PSIxMCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSI0ODkiIHk9IjE0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwO2ZpbGw6ICNjOWNmZDgiPnRvcGljOiBxPC90ZXh0Pgo8dGV4dCB4PSI0ODkiIHk9IjE2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnNlbmRzIHB1Ymxpc2hlZCBoZXJlPC90ZXh0Pgo8dGV4dCB4PSI0ODkiIHk9IjE4NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmRhdGEgKyBhdHRyaWJ1dGVzIHByZXNlcnZlZDwvdGV4dD4KPHJlY3QgeD0iNjAyIiB5PSIxMDQiIHdpZHRoPSIyMDQiIGhlaWdodD0iMTE0IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNzA0IiB5PSIxNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+c3Vic2NyaXB0aW9uOiBxLXN1YjwvdGV4dD4KPHRleHQgeD0iNzA0IiB5PSIxNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPlN0cmVhbWluZ1B1bGw8L3RleHQ+Cjx0ZXh0IHg9IjcwNCIgeT0iMTg2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5ib3VuZGVkIG1lc3NhZ2VzIG91dHN0YW5kaW5nPC90ZXh0Pgo8L3N2Zz4=" alt="Architecture: the app's SQS SDK calls a Rust Tensor9 adapter, which serves the SQS API from Google Pub/Sub over a keyless GCP identity. The adapter batches sends per topic and drains a long-lived consumer per subscription into a small in-process buffer, so a receive can return immediately when the buffer has an eligible message. Pub/Sub holds the topic q and the subscription q-sub, and keeps a bounded number of messages outstanding." />
</div>

<p className="t9-caption">Pub/Sub stores durable messages. The adapter keeps a local receive buffer and stream-scoped acknowledgement handles.</p>

#### Receiving messages

A background `StreamingPull` consumer reads the subscription continuously and puts messages in a bounded buffer. `ReceiveMessage` reads that buffer. If a message arrives while the call is waiting, it can return immediately without waiting for another poll.

`WaitTimeSeconds` sets how long to wait for the first message, capped at 20 seconds. Zero checks once without blocking; an empty result is valid. After the first message arrives, the adapter fills the rest of the batch from buffered messages without waiting again. `MaxNumberOfMessages` is clamped to 1–10. Pub/Sub limits unacknowledged messages, and the adapter's bounded buffer absorbs short interruptions in receiving while limiting messages held during idle periods. The adapter reconstructs attributes and recomputes MD5 checksums for SDK verification. Use Google Cloud monitoring to size the receive buffer and identify publish or delivery bottlenecks.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjM2IiB2aWV3Qm94PSIwIDAgODM2IDIzNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpdmUgZHJhaW5zIGEgbG9uZy1saXZlZCBTdHJlYW1pbmdQdWxsIGJ1ZmZlciByYXRoZXIgdGhhbiBpc3N1aW5nIGEgYmxvY2tpbmcgcHVsbCBwZXIgY2FsbC4gU3RlcCBvbmU6IHRoZSBjb25zdW1lciBob2xkcyB0aGUgbWVzc2FnZSBzdHJlYW0gYW5kIGZvcndhcmRzIGVhY2ggbWVzc2FnZSBpbnRvIGEgc21hbGwgaW4tcHJvY2VzcyBidWZmZXIgdGhlIGluc3RhbnQgaXQgbGFuZHMuIFN0ZXAgdHdvOiBhIHJlY2VpdmUgaG9ub3JzIFdhaXRUaW1lU2Vjb25kcyBhcyBhIGRyYWluIGJ1ZGdldCBjYXBwZWQgYXQgMjAgc2Vjb25kcywgd2hlcmUgYSB3YWl0IG9mIHplcm8gaXMgYSBzaW5nbGUgbm9uLWJsb2NraW5nIHByb2JlLiBTdGVwIHRocmVlOiBpdCBmaWxscyB0aGUgcmVzdCBvZiB0aGUgYmF0Y2gsIHVwIHRvIHRlbiBtZXNzYWdlcywgZnJvbSB3aGF0ZXZlciBpcyBhbHJlYWR5IGJ1ZmZlcmVkLCB3aXRoIG5vIGV4dHJhIHdhaXRpbmcuIEEgbWVzc2FnZSBhcnJpdmluZyBtaWQtd2FpdCBpcyByZXR1cm5lZCBpbW1lZGlhdGVseSwgc28gdGhlcmUgaXMgbm8gcG9sbCBmbG9vci4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InAzYSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+CjxtYXJrZXIgaWQ9InAzZyIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMDU5NjY5Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPGNpcmNsZSBjeD0iNDAiIGN5PSI1NiIgcj0iMTMiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48dGV4dCB4PSI0MCIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+MTwvdGV4dD4KPHJlY3QgeD0iNjIiIHk9IjM4IiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjQ4IiByeD0iMTAiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNzYiIHk9IjU4IiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEyLjVweCI+U3RyZWFtaW5nUHVsbCBjb25zdW1lciBob2xkcyB0aGUgc3RyZWFtPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iNzUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5mb3J3YXJkcyBlYWNoIG1lc3NhZ2UgaW50byBhIHNtYWxsIDx0c3BhbiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZmlsbDojNDc1NTY5Ij5idWZmZXI8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjIwMCIgeTE9Ijg2IiB4Mj0iMjAwIiB5Mj0iMTA4IiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI3AzYSkiLz4KPGNpcmNsZSBjeD0iNDAiIGN5PSIxMzAiIHI9IjEzIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PHRleHQgeD0iNDAiIHk9IjEzNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj4yPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iMTEyIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjQ4IiByeD0iMTAiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNzYiIHk9IjEzMiIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMi41cHgiPkZpcnN0IG1lc3NhZ2UgaG9ub3JzIFdhaXRUaW1lU2Vjb25kczwvdGV4dD4KPHRleHQgeD0iNzYiIHk9IjE0OSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPndhaXQg4omkIDIwcyDCtyB6ZXJvIGNoZWNrcyBvbmNlIHdpdGhvdXQgYmxvY2tpbmc8L3RleHQ+CjxsaW5lIHgxPSIyMDAiIHkxPSIxNjAiIHgyPSIyMDAiIHkyPSIxODIiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcDNhKSIvPgo8Y2lyY2xlIGN4PSI0MCIgY3k9IjIwNCIgcj0iMTMiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48dGV4dCB4PSI0MCIgeT0iMjA4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPjM8L3RleHQ+CjxyZWN0IHg9IjYyIiB5PSIxODYiIHdpZHRoPSIzMDAiIGhlaWdodD0iNDgiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI3NiIgeT0iMjA2IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEyLjVweCI+RmlsbCB0aGUgcmVzdCBvZiB0aGUgYmF0Y2ggKHVwIHRvIDEwKTwvdGV4dD4KPHRleHQgeD0iNzYiIHk9IjIyMyIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+ZnJvbSB3aGF0IGlzIGFscmVhZHkgYnVmZmVyZWQsIG5vIGV4dHJhIHdhaXQ8L3RleHQ+CjxsaW5lIHgxPSIzNjIiIHkxPSI2MiIgeDI9IjQwNCIgeTI9IjEzMiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNwM2cpIi8+CjxyZWN0IHg9IjQwNiIgeT0iOTIiIHdpZHRoPSI0MTQiIGhlaWdodD0iNDgiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI2MTMiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMnB4Ij5tZXNzYWdlIGF2YWlsYWJsZSB3aXRoaW4gYnVkZ2V0IOKGkiByZXR1cm5lZCBhdCBvbmNlPC90ZXh0Pgo8dGV4dCB4PSI2MTMiIHk9IjEyOSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+YXJyaXZlcyB3aGlsZSB3YWl0aW5nIOKGkiByZXR1cm5lZCB3aXRob3V0IGFub3RoZXIgcG9sbDwvdGV4dD4KPHJlY3QgeD0iNDA2IiB5PSIxNTgiIHdpZHRoPSI0MTQiIGhlaWdodD0iNDQiIHJ4PSIxMCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI2MTMiIHk9IjE3NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmVtcHR5IHdpdGhpbiBidWRnZXQg4oaSIGEgdmFsaWQgU1FTIHJlc3VsdDwvdGV4dD4KPHRleHQgeD0iNjEzIiB5PSIxOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiM5NGEzYjgiPm5vIGVtcHR5LXRoZW4tcmV0cnkgY3ljbGUgdG8gd2FpdCBvdXQ8L3RleHQ+Cjwvc3ZnPg==" alt="A receive drains a long-lived StreamingPull buffer rather than issuing a blocking pull per call. Step one: the consumer holds the message stream and forwards each message into a small in-process buffer the instant it lands. Step two: a receive honors WaitTimeSeconds as a drain budget capped at 20 seconds, where a wait of zero is a single non-blocking probe. Step three: it fills the rest of the batch, up to ten messages, from whatever is already buffered, with no extra waiting. A message arriving mid-wait is returned immediately, so there is no poll floor." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjM2IiB2aWV3Qm94PSIwIDAgODM2IDIzNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpdmUgZHJhaW5zIGEgbG9uZy1saXZlZCBTdHJlYW1pbmdQdWxsIGJ1ZmZlciByYXRoZXIgdGhhbiBpc3N1aW5nIGEgYmxvY2tpbmcgcHVsbCBwZXIgY2FsbC4gU3RlcCBvbmU6IHRoZSBjb25zdW1lciBob2xkcyB0aGUgbWVzc2FnZSBzdHJlYW0gYW5kIGZvcndhcmRzIGVhY2ggbWVzc2FnZSBpbnRvIGEgc21hbGwgaW4tcHJvY2VzcyBidWZmZXIgdGhlIGluc3RhbnQgaXQgbGFuZHMuIFN0ZXAgdHdvOiBhIHJlY2VpdmUgaG9ub3JzIFdhaXRUaW1lU2Vjb25kcyBhcyBhIGRyYWluIGJ1ZGdldCBjYXBwZWQgYXQgMjAgc2Vjb25kcywgd2hlcmUgYSB3YWl0IG9mIHplcm8gaXMgYSBzaW5nbGUgbm9uLWJsb2NraW5nIHByb2JlLiBTdGVwIHRocmVlOiBpdCBmaWxscyB0aGUgcmVzdCBvZiB0aGUgYmF0Y2gsIHVwIHRvIHRlbiBtZXNzYWdlcywgZnJvbSB3aGF0ZXZlciBpcyBhbHJlYWR5IGJ1ZmZlcmVkLCB3aXRoIG5vIGV4dHJhIHdhaXRpbmcuIEEgbWVzc2FnZSBhcnJpdmluZyBtaWQtd2FpdCBpcyByZXR1cm5lZCBpbW1lZGlhdGVseSwgc28gdGhlcmUgaXMgbm8gcG9sbCBmbG9vci4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InAzYSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+CjxtYXJrZXIgaWQ9InAzZyIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMjBmN2I0Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPGNpcmNsZSBjeD0iNDAiIGN5PSI1NiIgcj0iMTMiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48dGV4dCB4PSI0MCIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+MTwvdGV4dD4KPHJlY3QgeD0iNjIiIHk9IjM4IiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjQ4IiByeD0iMTAiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNzYiIHk9IjU4IiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEyLjVweCI+U3RyZWFtaW5nUHVsbCBjb25zdW1lciBob2xkcyB0aGUgc3RyZWFtPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iNzUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5mb3J3YXJkcyBlYWNoIG1lc3NhZ2UgaW50byBhIHNtYWxsIDx0c3BhbiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2M5Y2ZkOCI+YnVmZmVyPC90c3Bhbj48L3RleHQ+CjxsaW5lIHgxPSIyMDAiIHkxPSI4NiIgeDI9IjIwMCIgeTI9IjEwOCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNwM2EpIi8+CjxjaXJjbGUgY3g9IjQwIiBjeT0iMTMwIiByPSIxMyIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSIxMzQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+MjwvdGV4dD4KPHJlY3QgeD0iNjIiIHk9IjExMiIgd2lkdGg9IjMwMCIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSIxMzIiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5GaXJzdCBtZXNzYWdlIGhvbm9ycyBXYWl0VGltZVNlY29uZHM8L3RleHQ+Cjx0ZXh0IHg9Ijc2IiB5PSIxNDkiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij53YWl0IOKJpCAyMHMgwrcgemVybyBjaGVja3Mgb25jZSB3aXRob3V0IGJsb2NraW5nPC90ZXh0Pgo8bGluZSB4MT0iMjAwIiB5MT0iMTYwIiB4Mj0iMjAwIiB5Mj0iMTgyIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI3AzYSkiLz4KPGNpcmNsZSBjeD0iNDAiIGN5PSIyMDQiIHI9IjEzIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PHRleHQgeD0iNDAiIHk9IjIwOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj4zPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iMTg2IiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjQ4IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzYiIHk9IjIwNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMi41cHgiPkZpbGwgdGhlIHJlc3Qgb2YgdGhlIGJhdGNoICh1cCB0byAxMCk8L3RleHQ+Cjx0ZXh0IHg9Ijc2IiB5PSIyMjMiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmZyb20gd2hhdCBpcyBhbHJlYWR5IGJ1ZmZlcmVkLCBubyBleHRyYSB3YWl0PC90ZXh0Pgo8bGluZSB4MT0iMzYyIiB5MT0iNjIiIHgyPSI0MDQiIHkyPSIxMzIiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcDNnKSIvPgo8cmVjdCB4PSI0MDYiIHk9IjkyIiB3aWR0aD0iNDE0IiBoZWlnaHQ9IjQ4IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNjEzIiB5PSIxMTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTJweCI+bWVzc2FnZSBhdmFpbGFibGUgd2l0aGluIGJ1ZGdldCDihpIgcmV0dXJuZWQgYXQgb25jZTwvdGV4dD4KPHRleHQgeD0iNjEzIiB5PSIxMjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmFycml2ZXMgd2hpbGUgd2FpdGluZyDihpIgcmV0dXJuZWQgd2l0aG91dCBhbm90aGVyIHBvbGw8L3RleHQ+CjxyZWN0IHg9IjQwNiIgeT0iMTU4IiB3aWR0aD0iNDE0IiBoZWlnaHQ9IjQ0IiByeD0iMTAiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNjEzIiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5lbXB0eSB3aXRoaW4gYnVkZ2V0IOKGkiBhIHZhbGlkIFNRUyByZXN1bHQ8L3RleHQ+Cjx0ZXh0IHg9IjYxMyIgeT0iMTkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzk0YTNiOCI+bm8gZW1wdHktdGhlbi1yZXRyeSBjeWNsZSB0byB3YWl0IG91dDwvdGV4dD4KPC9zdmc+" alt="A receive drains a long-lived StreamingPull buffer rather than issuing a blocking pull per call. Step one: the consumer holds the message stream and forwards each message into a small in-process buffer the instant it lands. Step two: a receive honors WaitTimeSeconds as a drain budget capped at 20 seconds, where a wait of zero is a single non-blocking probe. Step three: it fills the rest of the batch, up to ten messages, from whatever is already buffered, with no extra waiting. A message arriving mid-wait is returned immediately, so there is no poll floor." />
</div>

<p className="t9-caption">ReceiveMessage reads the StreamingPull buffer and waits up to WaitTimeSeconds for the first message, capped at 20 seconds. A message arriving during the wait can return immediately.</p>

#### Visibility & receipt handles

`VisibilityTimeout` maps to Pub/Sub's acknowledgement deadline. Queue defaults must be 10–600 seconds. `ReceiveMessage` overrides and `ChangeMessageVisibility` accept that range plus zero, which makes the message available immediately. Other values are rejected, not clamped. A per-call `ReceiveMessage` override updates the returned messages only when it differs from the stream default. The subscriber does not automatically extend deadlines, so a message left in the buffer past its deadline can be delivered again. Consumers must handle duplicate delivery.

The receipt handle is the Pub/Sub acknowledgement ID. It remains valid only while the `StreamingPull` consumer that received it is alive. `DeleteQueue`, `PurgeQueue` or a stream error disposes that consumer; the next receive starts a new one. Previously issued handles then stop resolving. Retained, unacknowledged messages can be delivered again with new handles; deleted, purged or retention-expired messages are not promised to return. Receive those messages again before deleting or extending them. `DeleteMessage` acknowledges one ID; batch delete acknowledges the IDs together.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjA4IiB2aWV3Qm94PSIwIDAgODM2IDIwOCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJMZWZ0OiB0aGUgU1FTIFZpc2liaWxpdHlUaW1lb3V0IG1hcHMgdG8gdGhlIHN1YnNjcmlwdGlvbidzIGFjayBkZWFkbGluZSwgYWNjZXB0aW5nIHF1ZXVlIGRlZmF1bHRzIGZyb20gdGVuIHRvIHNpeCBodW5kcmVkIHNlY29uZHMuIE90aGVyIGRlZmF1bHRzIGFyZSByZWplY3RlZC4gUGVyLW1lc3NhZ2UgdmlzaWJpbGl0eSByZXF1ZXN0cyBhbHNvIGFjY2VwdCB6ZXJvIGZvciBpbW1lZGlhdGUgcmVkZWxpdmVyeS4gUmlnaHQ6IHRoZSByZWNlaXB0IGhhbmRsZSBpcyB0aGUgb3BhcXVlIFB1Yi9TdWIgYWNrLWlkLCB3aGljaCBpcyBzdHJlYW0tc2NvcGVkIGFuZCBub3QgcmVzdGFydC1kdXJhYmxlOiBpdCBpcyBkcm9wcGVkIG9uIERlbGV0ZVF1ZXVlLCBQdXJnZVF1ZXVlLCBvciBhIHN0cmVhbSBlcnJvciwgcmV0YWluZWQsIHVuYWNrbm93bGVkZ2VkIG1lc3NhZ2VzIGNhbiB0aGVuIGJlIHJlZGVsaXZlcmVkIHVuZGVyIGEgZnJlc2ggYWNrLWlkLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0icDRhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiMwNTk2NjkiLz48L21hcmtlcj4KPG1hcmtlciBpZD0icDR4IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiNmNTllMGIiLz48L21hcmtlcj4KPC9kZWZzPgo8dGV4dCB4PSIyNiIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPkFDSy1ERUFETElORSBSQU5HRTwvdGV4dD4KPHJlY3QgeD0iMjYiIHk9IjM4IiB3aWR0aD0iMzYwIiBoZWlnaHQ9IjE1MCIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxsaW5lIHgxPSI2MCIgeTE9Ijk2IiB4Mj0iMzUyIiB5Mj0iOTYiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIyIi8+CjxsaW5lIHgxPSIxMjAiIHkxPSI5MCIgeDI9IjEyMCIgeTI9IjEwMiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8bGluZSB4MT0iMzE2IiB5MT0iOTAiIHgyPSIzMTYiIHkyPSIxMDIiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iMTIwIiB5PSI4NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGIiPjEwczwvdGV4dD4KPHRleHQgeD0iMzE2IiB5PSI4NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGIiPjEwbWluPC90ZXh0Pgo8cmVjdCB4PSIxMjAiIHk9IjkwIiB3aWR0aD0iMTk2IiBoZWlnaHQ9IjEyIiByeD0iMyIgZmlsbD0iI2E3ZjNkMCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEiLz4KPHRleHQgeD0iMjA2IiB5PSI2MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmFjY2VwdGVkIHF1ZXVlIGRlZmF1bHRzPC90ZXh0Pgo8dGV4dCB4PSI2NiIgeT0iMTMyIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZmlsbDojYjQ1MzA5Ij5RdWV1ZSBkZWZhdWx0OiAxMC02MDBzPC90ZXh0Pgo8dGV4dCB4PSI2NiIgeT0iMTQ2IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZmlsbDojYjQ1MzA5Ij5vdXRzaWRlIHJhbmdlOiByZWplY3RlZDwvdGV4dD4KPHJlY3QgeD0iMjE0IiB5PSIxMjAiIHdpZHRoPSIxNjQiIGhlaWdodD0iNTIiIHJ4PSI5IiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjI5NiIgeT0iMTQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjExcHgiPlBlci1tZXNzYWdlIFZUID0gMDwvdGV4dD4KPHRleHQgeD0iMjk2IiB5PSIxNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPmltbWVkaWF0ZSByZWRlbGl2ZXJ5PC90ZXh0Pgo8bGluZSB4MT0iMzk4IiB5MT0iMzQiIHgyPSIzOTgiIHkyPSIxODgiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNDI0IiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzY0NzQ4YiI+UkVDRUlQVCBIQU5ETEUgPSBBQ0stSUQ8L3RleHQ+CjxyZWN0IHg9IjQyNCIgeT0iMzgiIHdpZHRoPSIzODYiIGhlaWdodD0iMTUwIiByeD0iMTQiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHJlY3QgeD0iNDQyIiB5PSI1NiIgd2lkdGg9IjM1MCIgaGVpZ2h0PSIzMCIgcng9IjciIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNjE3IiB5PSI3NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzQ3NTU2OSI+b3BhcXVlIFB1Yi9TdWIgYWNrLWlkLCBzdHJlYW0tc2NvcGVkPC90ZXh0Pgo8dGV4dCB4PSI2MTciIHk9IjEwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnZhbGlkIG9ubHkgd2hpbGUgdGhpcyBjb25zdW1lcidzIHN0cmVhbSBpcyBhbGl2ZTwvdGV4dD4KPGxpbmUgeDE9IjYxNyIgeTE9IjExNCIgeDI9IjYxNyIgeTI9IjEzMCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjEuNiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAzIi8+Cjx0ZXh0IHg9IjYxNyIgeT0iMTMyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDA7ZmlsbDojYjQ1MzA5Ij4oRGVsZXRlUXVldWUgwrcgUHVyZ2Ugwrcgc3RyZWFtIGVycm9yKTwvdGV4dD4KPHRleHQgeD0iNjE3IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiNiNDUzMDkiPmFjay1pZCBkcm9wcGVkOiBub3QgcmVzdGFydC1kdXJhYmxlPC90ZXh0Pgo8dGV4dCB4PSI2MTciIHk9IjE3NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZpbGw6Izk0YTNiOCI+cmV0YWluZWQgbWVzc2FnZXMgbWF5IGdldCBhIGZyZXNoIGFjay1pZDwvdGV4dD4KPC9zdmc+" alt="Left: the SQS VisibilityTimeout maps to the subscription's ack deadline, accepting queue defaults from ten to six hundred seconds. Other defaults are rejected. Per-message visibility requests also accept zero for immediate redelivery. Right: the receipt handle is the opaque Pub/Sub ack-id, which is stream-scoped and not restart-durable: it is dropped on DeleteQueue, PurgeQueue, or a stream error, retained, unacknowledged messages can then be redelivered under a fresh ack-id." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjA4IiB2aWV3Qm94PSIwIDAgODM2IDIwOCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJMZWZ0OiB0aGUgU1FTIFZpc2liaWxpdHlUaW1lb3V0IG1hcHMgdG8gdGhlIHN1YnNjcmlwdGlvbidzIGFjayBkZWFkbGluZSwgYWNjZXB0aW5nIHF1ZXVlIGRlZmF1bHRzIGZyb20gdGVuIHRvIHNpeCBodW5kcmVkIHNlY29uZHMuIE90aGVyIGRlZmF1bHRzIGFyZSByZWplY3RlZC4gUGVyLW1lc3NhZ2UgdmlzaWJpbGl0eSByZXF1ZXN0cyBhbHNvIGFjY2VwdCB6ZXJvIGZvciBpbW1lZGlhdGUgcmVkZWxpdmVyeS4gUmlnaHQ6IHRoZSByZWNlaXB0IGhhbmRsZSBpcyB0aGUgb3BhcXVlIFB1Yi9TdWIgYWNrLWlkLCB3aGljaCBpcyBzdHJlYW0tc2NvcGVkIGFuZCBub3QgcmVzdGFydC1kdXJhYmxlOiBpdCBpcyBkcm9wcGVkIG9uIERlbGV0ZVF1ZXVlLCBQdXJnZVF1ZXVlLCBvciBhIHN0cmVhbSBlcnJvciwgcmV0YWluZWQsIHVuYWNrbm93bGVkZ2VkIG1lc3NhZ2VzIGNhbiB0aGVuIGJlIHJlZGVsaXZlcmVkIHVuZGVyIGEgZnJlc2ggYWNrLWlkLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0icDRhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiMyMGY3YjQiLz48L21hcmtlcj4KPG1hcmtlciBpZD0icDR4IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiNmNTllMGIiLz48L21hcmtlcj4KPC9kZWZzPgo8dGV4dCB4PSIyNiIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5BQ0stREVBRExJTkUgUkFOR0U8L3RleHQ+CjxyZWN0IHg9IjI2IiB5PSIzOCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIxNTAiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8bGluZSB4MT0iNjAiIHkxPSI5NiIgeDI9IjM1MiIgeTI9Ijk2IiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMiIvPgo8bGluZSB4MT0iMTIwIiB5MT0iOTAiIHgyPSIxMjAiIHkyPSIxMDIiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPGxpbmUgeDE9IjMxNiIgeTE9IjkwIiB4Mj0iMzE2IiB5Mj0iMTAyIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjEyMCIgeT0iODYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij4xMHM8L3RleHQ+Cjx0ZXh0IHg9IjMxNiIgeT0iODYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij4xMG1pbjwvdGV4dD4KPHJlY3QgeD0iMTIwIiB5PSI5MCIgd2lkdGg9IjE5NiIgaGVpZ2h0PSIxMiIgcng9IjMiIGZpbGw9IiMxYTMxMjciIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+Cjx0ZXh0IHg9IjIwNiIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5hY2NlcHRlZCBxdWV1ZSBkZWZhdWx0czwvdGV4dD4KPHRleHQgeD0iNjYiIHk9IjEzMiIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNkZWIyOTAiPlF1ZXVlIGRlZmF1bHQ6IDEwLTYwMHM8L3RleHQ+Cjx0ZXh0IHg9IjY2IiB5PSIxNDYiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGViMjkwIj5vdXRzaWRlIHJhbmdlOiByZWplY3RlZDwvdGV4dD4KPHJlY3QgeD0iMjE0IiB5PSIxMjAiIHdpZHRoPSIxNjQiIGhlaWdodD0iNTIiIHJ4PSI5IiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjI5NiIgeT0iMTQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjExcHgiPlBlci1tZXNzYWdlIFZUID0gMDwvdGV4dD4KPHRleHQgeD0iMjk2IiB5PSIxNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmltbWVkaWF0ZSByZWRlbGl2ZXJ5PC90ZXh0Pgo8bGluZSB4MT0iMzk4IiB5MT0iMzQiIHgyPSIzOTgiIHkyPSIxODgiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNDI0IiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICNjOWNmZDgiPlJFQ0VJUFQgSEFORExFID0gQUNLLUlEPC90ZXh0Pgo8cmVjdCB4PSI0MjQiIHk9IjM4IiB3aWR0aD0iMzg2IiBoZWlnaHQ9IjE1MCIgcng9IjE0IiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+CjxyZWN0IHg9IjQ0MiIgeT0iNTYiIHdpZHRoPSIzNTAiIGhlaWdodD0iMzAiIHJ4PSI3IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjYxNyIgeT0iNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjYzljZmQ4Ij5vcGFxdWUgUHViL1N1YiBhY2staWQsIHN0cmVhbS1zY29wZWQ8L3RleHQ+Cjx0ZXh0IHg9IjYxNyIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+dmFsaWQgb25seSB3aGlsZSB0aGlzIGNvbnN1bWVyJ3Mgc3RyZWFtIGlzIGFsaXZlPC90ZXh0Pgo8bGluZSB4MT0iNjE3IiB5MT0iMTE0IiB4Mj0iNjE3IiB5Mj0iMTMwIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMS42IiBzdHJva2UtZGFzaGFycmF5PSIzIDMiLz4KPHRleHQgeD0iNjE3IiB5PSIxMzIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMDtmaWxsOiAjZGViMjkwIj4oRGVsZXRlUXVldWUgwrcgUHVyZ2Ugwrcgc3RyZWFtIGVycm9yKTwvdGV4dD4KPHRleHQgeD0iNjE3IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGViMjkwIj5hY2staWQgZHJvcHBlZDogbm90IHJlc3RhcnQtZHVyYWJsZTwvdGV4dD4KPHRleHQgeD0iNjE3IiB5PSIxNzQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTRhM2I4Ij5yZXRhaW5lZCBtZXNzYWdlcyBtYXkgZ2V0IGEgZnJlc2ggYWNrLWlkPC90ZXh0Pgo8L3N2Zz4=" alt="Left: the SQS VisibilityTimeout maps to the subscription's ack deadline, accepting queue defaults from ten to six hundred seconds. Other defaults are rejected. Per-message visibility requests also accept zero for immediate redelivery. Right: the receipt handle is the opaque Pub/Sub ack-id, which is stream-scoped and not restart-durable: it is dropped on DeleteQueue, PurgeQueue, or a stream error, retained, unacknowledged messages can then be redelivered under a fresh ack-id." />
</div>

<p className="t9-caption">Queue visibility defaults must be 10-600 seconds. Per-message visibility also accepts 0 for immediate redelivery; other values are rejected. Receipt handles are stream-scoped Pub/Sub acknowledgement IDs and do not survive a restart.</p>

#### Dead-letter & delivery

Pub/Sub handles dead-letter delivery. The SQS `RedrivePolicy` sets the subscription's delivery-attempt limit from `maxReceiveCount`. The adapter resolves `deadLetterTargetArn`, supplied as an SQS-style ARN or bare name, to `projects/<id>/topics/<name>`. Pub/Sub accepts a threshold of 5-100 attempts, but forwarding is best-effort: it can occur before or after that count. Delivery-attempt tracking requires the dead-letter policy and the required IAM permissions. The destination is a Pub/Sub topic, whereas an SQS dead-letter destination is another queue.

Delivery is at-least-once. `ApproximateReceiveCount` uses Pub/Sub's delivery-attempt count, which is available only when the subscription has a dead-letter policy; other subscriptions return `1` on every receive. `SendMessage` uses the topic's publisher batching and returns the message ID and MD5 checksums. `SendMessageBatch` uses one multi-message Publish RPC and maps returned message IDs to entry IDs by position. A validation failure is reported for the affected entry without failing the whole batch.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJEZWFkLWxldHRlcmluZyBpcyBuYXRpdmUgYW5kIHNlcnZlci1zaWRlLiBBbiBTUVMgUmVkcml2ZVBvbGljeSBtYXBzIHRvIHRoZSBzdWJzY3JpcHRpb24ncyBkZWFkLWxldHRlciBwb2xpY3ksIHdoZXJlIG1heFJlY2VpdmVDb3VudCBiZWNvbWVzIHRoZSBkZWxpdmVyeS1hdHRlbXB0IGxpbWl0IGFuZCB0aGUgZGVhZExldHRlclRhcmdldEFybiBpcyBpbnRlcnByZXRlZCBhcyBhIGZ1bGx5LXF1YWxpZmllZCBQdWIvU3ViIGRlYWQtbGV0dGVyIHRvcGljLiBQdWIvU3ViIGZvcndhcmRzIG1lc3NhZ2VzIHRvIHRoYXQgdG9waWMgb24gYSBiZXN0LWVmZm9ydCBiYXNpcywgcG90ZW50aWFsbHkgYmVmb3JlIG9yIGFmdGVyIHRoZSBjb25maWd1cmVkIGF0dGVtcHQgY291bnQuIFB1Yi9TdWIncyBkZWxpdmVyeS1hdHRlbXB0IGNvdW50LCBzdXJmYWNlZCBhcyBBcHByb3hpbWF0ZVJlY2VpdmVDb3VudCwgaXMgcG9wdWxhdGVkIG9ubHkgd2hlbiB0aGUgc3Vic2NyaXB0aW9uIGhhcyBhIGRlYWQtbGV0dGVyIHBvbGljeTsgd2l0aG91dCBvbmUgZXZlcnkgcmVjZWl2ZSByZXBvcnRzIG9uZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InA1YSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMDU5NjY5Ii8+PC9tYXJrZXI+CjxtYXJrZXIgaWQ9InA1eCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjZGMyNjI2Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPHRleHQgeD0iMjYiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDQ3ODU3Ij5TVUJTQ1JJUFRJT04gcS1zdWI8L3RleHQ+CjxyZWN0IHg9IjI2IiB5PSI0NCIgd2lkdGg9IjI1MCIgaGVpZ2h0PSI1NiIgcng9IjEyIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjE1MSIgeT0iNzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTEuNXB4Ij5kZWFkLWxldHRlciBwb2xpY3k8L3RleHQ+Cjx0ZXh0IHg9IjE1MSIgeT0iODgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiM0NzU1NjkiPmF0dGVtcHQgdGFyZ2V0ID0gbWF4UmVjZWl2ZUNvdW50PC90ZXh0Pgo8bGluZSB4MT0iMjc2IiB5MT0iNzIiIHgyPSIzMTYiIHkyPSI3MiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcDVhKSIvPgo8dGV4dCB4PSIyOTYiIHk9IjY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPuKJiCBOPC90ZXh0Pgo8cmVjdCB4PSIzMjAiIHk9IjQ0IiB3aWR0aD0iMjMwIiBoZWlnaHQ9IjU2IiByeD0iMTIiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4KPHRleHQgeD0iNDM1IiB5PSI3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMnB4Ij5QdWIvU3ViIGZvcndhcmRzIGl0PC90ZXh0Pgo8dGV4dCB4PSI0MzUiIHk9Ijg4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5iZXN0LWVmZm9ydCDCtyBzZXJ2ZXItc2lkZTwvdGV4dD4KPGxpbmUgeDE9IjU1MCIgeTE9IjcyIiB4Mj0iNTkwIiB5Mj0iNzIiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3A1YSkiLz4KPHJlY3QgeD0iNTk0IiB5PSI0NCIgd2lkdGg9IjIxNiIgaGVpZ2h0PSI1NiIgcng9IjEyIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjcwMiIgeT0iNzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+ZGVhZC1sZXR0ZXIgdG9waWM8L3RleHQ+Cjx0ZXh0IHg9IjcwMiIgeT0iODgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPnByb2plY3RzLyZsdDtpZCZndDsvdG9waWNzLyZsdDtuYW1lJmd0OzwvdGV4dD4KPHJlY3QgeD0iMjYiIHk9IjE0MCIgd2lkdGg9Ijc4NCIgaGVpZ2h0PSI0NiIgcng9IjEwIiBmaWxsPSIjZmZmYmViIiBzdHJva2U9IiNmZGU2OGEiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjQxOCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDo2MDAgMTEuNXB4IEludGVyLHNhbnMtc2VyaWY7ZmlsbDojYjQ1MzA5Ij5BcHByb3hpbWF0ZVJlY2VpdmVDb3VudCA9IFB1Yi9TdWIgZGVsaXZlcnktYXR0ZW1wdCBjb3VudDwvdGV4dD4KPHRleHQgeD0iNDE4IiB5PSIxNzciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiNiNDUzMDkiPnJlcXVpcmVzIGEgRExRIHBvbGljeSArIElBTSBwZXJtaXNzaW9uczsgY291bnRzIGNhbiByZXNldDsgYSBwbGFpbiBxdWV1ZSByZXBvcnRzIDE8L3RleHQ+Cjwvc3ZnPg==" alt="Dead-lettering is native and server-side. An SQS RedrivePolicy maps to the subscription's dead-letter policy, where maxReceiveCount becomes the delivery-attempt limit and the deadLetterTargetArn is interpreted as a fully-qualified Pub/Sub dead-letter topic. Pub/Sub forwards messages to that topic on a best-effort basis, potentially before or after the configured attempt count. Pub/Sub's delivery-attempt count, surfaced as ApproximateReceiveCount, is populated only when the subscription has a dead-letter policy; without one every receive reports one." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJEZWFkLWxldHRlcmluZyBpcyBuYXRpdmUgYW5kIHNlcnZlci1zaWRlLiBBbiBTUVMgUmVkcml2ZVBvbGljeSBtYXBzIHRvIHRoZSBzdWJzY3JpcHRpb24ncyBkZWFkLWxldHRlciBwb2xpY3ksIHdoZXJlIG1heFJlY2VpdmVDb3VudCBiZWNvbWVzIHRoZSBkZWxpdmVyeS1hdHRlbXB0IGxpbWl0IGFuZCB0aGUgZGVhZExldHRlclRhcmdldEFybiBpcyBpbnRlcnByZXRlZCBhcyBhIGZ1bGx5LXF1YWxpZmllZCBQdWIvU3ViIGRlYWQtbGV0dGVyIHRvcGljLiBQdWIvU3ViIGZvcndhcmRzIG1lc3NhZ2VzIHRvIHRoYXQgdG9waWMgb24gYSBiZXN0LWVmZm9ydCBiYXNpcywgcG90ZW50aWFsbHkgYmVmb3JlIG9yIGFmdGVyIHRoZSBjb25maWd1cmVkIGF0dGVtcHQgY291bnQuIFB1Yi9TdWIncyBkZWxpdmVyeS1hdHRlbXB0IGNvdW50LCBzdXJmYWNlZCBhcyBBcHByb3hpbWF0ZVJlY2VpdmVDb3VudCwgaXMgcG9wdWxhdGVkIG9ubHkgd2hlbiB0aGUgc3Vic2NyaXB0aW9uIGhhcyBhIGRlYWQtbGV0dGVyIHBvbGljeTsgd2l0aG91dCBvbmUgZXZlcnkgcmVjZWl2ZSByZXBvcnRzIG9uZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InA1YSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMjBmN2I0Ii8+PC9tYXJrZXI+CjxtYXJrZXIgaWQ9InA1eCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjZGMyNjI2Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPHRleHQgeD0iMjYiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwZGVjOCI+U1VCU0NSSVBUSU9OIHEtc3ViPC90ZXh0Pgo8cmVjdCB4PSIyNiIgeT0iNDQiIHdpZHRoPSIyNTAiIGhlaWdodD0iNTYiIHJ4PSIxMiIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxNTEiIHk9IjcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExLjVweCI+ZGVhZC1sZXR0ZXIgcG9saWN5PC90ZXh0Pgo8dGV4dCB4PSIxNTEiIHk9Ijg4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2M5Y2ZkOCI+YXR0ZW1wdCB0YXJnZXQgPSBtYXhSZWNlaXZlQ291bnQ8L3RleHQ+CjxsaW5lIHgxPSIyNzYiIHkxPSI3MiIgeDI9IjMxNiIgeTI9IjcyIiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNwNWEpIi8+Cjx0ZXh0IHg9IjI5NiIgeT0iNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+4omIIE48L3RleHQ+CjxyZWN0IHg9IjMyMCIgeT0iNDQiIHdpZHRoPSIyMzAiIGhlaWdodD0iNTYiIHJ4PSIxMiIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNiIvPgo8dGV4dCB4PSI0MzUiIHk9IjcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlB1Yi9TdWIgZm9yd2FyZHMgaXQ8L3RleHQ+Cjx0ZXh0IHg9IjQzNSIgeT0iODgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmJlc3QtZWZmb3J0IMK3IHNlcnZlci1zaWRlPC90ZXh0Pgo8bGluZSB4MT0iNTUwIiB5MT0iNzIiIHgyPSI1OTAiIHkyPSI3MiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcDVhKSIvPgo8cmVjdCB4PSI1OTQiIHk9IjQ0IiB3aWR0aD0iMjE2IiBoZWlnaHQ9IjU2IiByeD0iMTIiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4KPHRleHQgeD0iNzAyIiB5PSI3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5kZWFkLWxldHRlciB0b3BpYzwvdGV4dD4KPHRleHQgeD0iNzAyIiB5PSI4OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+cHJvamVjdHMvJmx0O2lkJmd0Oy90b3BpY3MvJmx0O25hbWUmZ3Q7PC90ZXh0Pgo8cmVjdCB4PSIyNiIgeT0iMTQwIiB3aWR0aD0iNzg0IiBoZWlnaHQ9IjQ2IiByeD0iMTAiIGZpbGw9IiMzMTJkMWEiIHN0cm9rZT0iIzY2NWQzZCIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNDE4IiB5PSIxNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OjYwMCAxMS41cHggSW50ZXIsc2Fucy1zZXJpZjtmaWxsOiAjZGViMjkwIj5BcHByb3hpbWF0ZVJlY2VpdmVDb3VudCA9IFB1Yi9TdWIgZGVsaXZlcnktYXR0ZW1wdCBjb3VudDwvdGV4dD4KPHRleHQgeD0iNDE4IiB5PSIxNzciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGViMjkwIj5yZXF1aXJlcyBhIERMUSBwb2xpY3kgKyBJQU0gcGVybWlzc2lvbnM7IGNvdW50cyBjYW4gcmVzZXQ7IGEgcGxhaW4gcXVldWUgcmVwb3J0cyAxPC90ZXh0Pgo8L3N2Zz4=" alt="Dead-lettering is native and server-side. An SQS RedrivePolicy maps to the subscription's dead-letter policy, where maxReceiveCount becomes the delivery-attempt limit and the deadLetterTargetArn is interpreted as a fully-qualified Pub/Sub dead-letter topic. Pub/Sub forwards messages to that topic on a best-effort basis, potentially before or after the configured attempt count. Pub/Sub's delivery-attempt count, surfaced as ApproximateReceiveCount, is populated only when the subscription has a dead-letter policy; without one every receive reports one." />
</div>

<p className="t9-caption">Pub/Sub forwards messages to a dead-letter topic on a best-effort basis. Delivery-attempt counts require a correctly configured policy and IAM permissions.</p>

#### Limitations

**Message size.** The managed adapter checks the declared `MaximumMessageSize` before publishing, including each entry of a batch. Its default is 262144 bytes (256 KiB), below [native SQS's 1 MiB limit](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html). Pub/Sub's native 10 MB limit does not increase the queue's declared allowance.

**Retention.** Queue creation and `SetQueueAttributes` apply `MessageRetentionPeriod` to Pub/Sub's subscription retention. Pub/Sub requires at least ten minutes, so shorter SQS retention values are rejected. The remaining SQS range, through 14 days, is representable. Configuration reads use the queue catalog rather than substituting Pub/Sub's default lifetime.

△ Pub/Sub limitations

* **Approximate message counts are not reported.** Pub/Sub does not expose approximate depth cheaply, so `ApproximateNumberOfMessages`, `...NotVisible`, and `...Delayed` come back empty. Depth is for GCP monitoring once this is running.
* **Ack-deadlines are not auto-extended.** The StreamingPull subscriber does not renew a delivered message's lease; the queue default must be 10-600 seconds. A message buffered past its deadline can be delivered again; consumers must tolerate duplicates.
* **Receipt handles are stream-scoped, not restart-durable.** The receipt handle is the opaque Pub/Sub ack-id; it stops resolving after `DeleteQueue`, `PurgeQueue`, or a stream error. Retained, unacknowledged messages can be delivered again under a fresh ack-id.
* **ApproximateReceiveCount requires a configured dead-letter policy.** It is Pub/Sub's delivery-attempt count, which Pub/Sub supplies only with a correctly configured policy and IAM permissions; the count can reset. A plain queue reports `1` on every receive.
* **Nonzero delay is rejected.** Pub/Sub cannot schedule individual messages for later delivery. Queue- and message-level `DelaySeconds` must be zero.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTY0IiB2aWV3Qm94PSIwIDAgODM2IDE2NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJNYW5hZ2VkIHNlbmRzIGVuZm9yY2UgdGhlIGRlY2xhcmVkIHF1ZXVlIHNpemUgYmVmb3JlIHB1Ymxpc2hpbmcuIFF1ZXVlIHJldGVudGlvbiBjb25maWd1cmVzIHRoZSBQdWIvU3ViIHN1YnNjcmlwdGlvbjsgdmFsdWVzIGJlbG93IHRlbiBtaW51dGVzIGFyZSByZWplY3RlZC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPHJlY3QgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMzc2IiBoZWlnaHQ9IjEyNCIgcng9IjEyIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiLz4KPHRleHQgeD0iMzgiIHk9IjQ5IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+TWVzc2FnZSBzaXplPC90ZXh0Pgo8dGV4dCB4PSIzOCIgeT0iNzciIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPkRlY2xhcmVkIGxpbWl0IGNoZWNrZWQgYmVmb3JlIFNlbmRNZXNzYWdlPC90ZXh0Pgo8dGV4dCB4PSIzOCIgeT0iOTkiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPkJhdGNoIGVycm9ycyBhcHBseSB0byB0aGUgb3ZlcnNpemVkIGVudHJ5PC90ZXh0Pgo8dGV4dCB4PSIzOCIgeT0iMTIyIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5BZGFwdGVyIGRlZmF1bHQ6IDI2MjE0NCBieXRlcyAoMjU2IEtpQik8L3RleHQ+CjxyZWN0IHg9IjQxNiIgeT0iMjAiIHdpZHRoPSI0MDAiIGhlaWdodD0iMTI0IiByeD0iMTIiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIvPgo8dGV4dCB4PSI0MzQiIHk9IjQ5IiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYSI+UmV0ZW50aW9uPC90ZXh0Pgo8dGV4dCB4PSI0MzQiIHk9Ijc3IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+TWVzc2FnZVJldGVudGlvblBlcmlvZCDihpIgc3Vic2NyaXB0aW9uIGR1cmF0aW9uPC90ZXh0Pgo8dGV4dCB4PSI0MzQiIHk9Ijk5IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+QXBwbGllZCBvbiBxdWV1ZSBjcmVhdGlvbiBhbmQgZWRpdHM8L3RleHQ+Cjx0ZXh0IHg9IjQzNCIgeT0iMTIyIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+U3VwcG9ydGVkIFNRUyB3aW5kb3c6IDEwIG1pbnV0ZXMgdG8gMTQgZGF5czwvdGV4dD4KPC9zdmc+" alt="Managed sends enforce the declared queue size before publishing. Queue retention configures the Pub/Sub subscription; values below ten minutes are rejected." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTY0IiB2aWV3Qm94PSIwIDAgODM2IDE2NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJNYW5hZ2VkIHNlbmRzIGVuZm9yY2UgdGhlIGRlY2xhcmVkIHF1ZXVlIHNpemUgYmVmb3JlIHB1Ymxpc2hpbmcuIFF1ZXVlIHJldGVudGlvbiBjb25maWd1cmVzIHRoZSBQdWIvU3ViIHN1YnNjcmlwdGlvbjsgdmFsdWVzIGJlbG93IHRlbiBtaW51dGVzIGFyZSByZWplY3RlZC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPHJlY3QgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMzc2IiBoZWlnaHQ9IjEyNCIgcng9IjEyIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiLz4KPHRleHQgeD0iMzgiIHk9IjQ5IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+TWVzc2FnZSBzaXplPC90ZXh0Pgo8dGV4dCB4PSIzOCIgeT0iNzciIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPkRlY2xhcmVkIGxpbWl0IGNoZWNrZWQgYmVmb3JlIFNlbmRNZXNzYWdlPC90ZXh0Pgo8dGV4dCB4PSIzOCIgeT0iOTkiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPkJhdGNoIGVycm9ycyBhcHBseSB0byB0aGUgb3ZlcnNpemVkIGVudHJ5PC90ZXh0Pgo8dGV4dCB4PSIzOCIgeT0iMTIyIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5BZGFwdGVyIGRlZmF1bHQ6IDI2MjE0NCBieXRlcyAoMjU2IEtpQik8L3RleHQ+CjxyZWN0IHg9IjQxNiIgeT0iMjAiIHdpZHRoPSI0MDAiIGhlaWdodD0iMTI0IiByeD0iMTIiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIvPgo8dGV4dCB4PSI0MzQiIHk9IjQ5IiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkOCI+UmV0ZW50aW9uPC90ZXh0Pgo8dGV4dCB4PSI0MzQiIHk9Ijc3IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+TWVzc2FnZVJldGVudGlvblBlcmlvZCDihpIgc3Vic2NyaXB0aW9uIGR1cmF0aW9uPC90ZXh0Pgo8dGV4dCB4PSI0MzQiIHk9Ijk5IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+QXBwbGllZCBvbiBxdWV1ZSBjcmVhdGlvbiBhbmQgZWRpdHM8L3RleHQ+Cjx0ZXh0IHg9IjQzNCIgeT0iMTIyIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+U3VwcG9ydGVkIFNRUyB3aW5kb3c6IDEwIG1pbnV0ZXMgdG8gMTQgZGF5czwvdGV4dD4KPC9zdmc+" alt="Managed sends enforce the declared queue size before publishing. Queue retention configures the Pub/Sub subscription; values below ten minutes are rejected." />
</div>

<p className="t9-caption">The queue catalog supplies the size limit and retention setting; the adapter enforces size and configures subscription retention.</p>

#### Other considerations

* **Plan message cutover.** The Pub/Sub topic `q` and subscription `q-sub` start empty. Existing SQS messages are not migrated. Drain the source queue or dual-write during the transition; application SQS calls and checksum verification remain unchanged.
* **Google operates Pub/Sub.** Google manages message durability, delivery and availability. Tensor9 operates the SQS adapter.
* **Published messages remain in Pub/Sub.** The adapter keeps a bounded receive buffer in memory. On orderly stream disposal it releases buffered messages for redelivery. After an abrupt failure, unacknowledged messages can be delivered again when their deadlines expire.
* **Estimate Pub/Sub costs from message volume.** Billing follows the volume of data sent through Pub/Sub. The adapter does not meter additional usage.
* **Operational numbers come from GCP monitoring.** Approximate message counts (`ApproximateNumberOfMessages` and its siblings) come back empty and live latency, throughput, and cost are read from GCP monitoring once the workload is running, so point dashboards and alerts at Pub/Sub's metrics, not SQS CloudWatch queue metrics.

### Via Cloud SQL for PostgreSQL

| Operation               | Area           | Support   | Depth      | Notes                                                                                            |
| ----------------------- | -------------- | --------- | ---------- | ------------------------------------------------------------------------------------------------ |
| Dead-letter redrive     | Dead-letter    | Supported | Most usage | fires automatically once a message passes maxReceiveCount                                        |
| Message attributes      | Messages       | Supported | Common     | -                                                                                                |
| GetQueueAttributes      | Queues         | Supported | Most usage | reads queue attributes, including approximate message counts                                     |
| GetQueueUrl             | Queues         | Supported | Most usage | resolves the queue by name                                                                       |
| DelaySeconds            | Send / receive | Supported | Common     | a delayed message remains hidden until its delay expires                                         |
| DeleteMessage           | Send / receive | Supported | Common     | resolves by receipt handle; a stale handle returns ReceiptHandleIsInvalid                        |
| DeleteMessageBatch      | Send / receive | Supported | Common     | returns the result for each entry                                                                |
| ReceiveMessage          | Send / receive | Supported | Common     | long-poll (WaitTimeSeconds) honored; claims the oldest visible messages                          |
| SendMessage             | Send / receive | Supported | Common     | supports both SQS protocol formats; MD5 checksums match, identical to the portable Postgres tier |
| SendMessageBatch        | Send / receive | Supported | Common     | up to 10 messages per call; returns the result for each entry                                    |
| ChangeMessageVisibility | Visibility     | Supported | Common     | resolves by receipt handle; a stale handle is rejected rather than silently succeeding           |

#### PostgreSQL hosting

Google operates Cloud SQL for PostgreSQL, including database backups and HA. The adapter uses short-lived Cloud SQL IAM tokens as database passwords, without an Auth Proxy or static password. Queue data stays outside the customer's Kubernetes cluster and survives its rebuild. Tensor9 operates the queue schema and adapter. Queues start empty; existing SQS messages are not migrated. Drain the source or coordinate dual writes before cutover.

#### PostgreSQL queue behavior

Tensor9 adds an adapter, a proxy process, to your application pod and sets `AWS_ENDPOINT_URL_SQS` to its loopback address. Your application keeps its `SendMessage` and `ReceiveMessage` calls. The adapter implements them using PostgreSQL and returns SQS responses, error codes and MD5 checksums.

Each queue has a durable PostgreSQL table with one row per message. SQL operations implement sending, receiving, deletion, delay, visibility, dead-letter delivery and counts. Standard queues provide at-least-once delivery with best-effort ordering.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24ncyBTUVMgU0RLIGNhbGxzIEFtYXpvbiBTUVMuIEFmdGVyOiBpbiB0aGUgdGFyZ2V0IGNsb3VkIHRoZSBzYW1lIGFwcGxpY2F0aW9uIGFuZCBTREsgY2FsbCBhIFRlbnNvcjkgYWRhcHRlciwgd2hpY2ggc2VydmVzIHRoZSBTUVMgQVBJIGZyb20gYSBkdXJhYmxlIFBvc3RncmVzIHRhYmxlIHBlciBxdWV1ZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9ImFoMSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQ2IiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjExOCIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI4MCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjkwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iOTAiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPlNRUyBTREs8L3RleHQ+CjxsaW5lIHgxPSIxNTAiIHkxPSIxMTMiIHgyPSIyMTAiIHkyPSIxMTMiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2FoMSkiLz4KPHRleHQgeD0iMTgxIiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OC41cHgiPlNRUyBBUEk8L3RleHQ+CjxyZWN0IHg9IjIxNCIgeT0iODAiIHdpZHRoPSIxNDgiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyODgiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5BbWF6b24gU1FTPC90ZXh0Pgo8dGV4dCB4PSIyODgiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPkFXUy1tYW5hZ2VkPC90ZXh0Pgo8bGluZSB4MT0iNDE4IiB5MT0iNDAiIHgyPSI0MTgiIHkyPSIxNjAiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHJlY3QgeD0iNDYyIiB5PSI0NiIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMTgiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPk9OIFRIRSBUQVJHRVQgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjQ3NCIgeT0iODAiIHdpZHRoPSI5MiIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUyMCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI1MjAiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5Ij5zYW1lIFNESzwvdGV4dD4KPGxpbmUgeDE9IjU2NiIgeTE9IjExMyIgeDI9IjU5MCIgeTI9IjExMyIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjYWgxKSIvPgo8cmVjdCB4PSI1OTQiIHk9Ijc2IiB3aWR0aD0iMTEwIiBoZWlnaHQ9Ijc0IiByeD0iMTEiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iNjQ5IiB5PSIxMDIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+VGVuc29yOTwvdGV4dD4KPHRleHQgeD0iNjQ5IiB5PSIxMTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPnNlcnZpY2U8L3RleHQ+Cjx0ZXh0IHg9IjY0OSIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5hZGFwdGVyPC90ZXh0Pgo8bGluZSB4MT0iNzA0IiB5MT0iMTEzIiB4Mj0iNzI4IiB5Mj0iMTEzIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhaDEpIi8+CjxyZWN0IHg9IjczMiIgeT0iODAiIHdpZHRoPSI4NCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijc3NCIgeT0iMTA4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExcHgiPlBvc3RncmVzPC90ZXh0Pgo8dGV4dCB4PSI3NzQiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnRhYmxlIHBlciBxdWV1ZTwvdGV4dD4KPC9zdmc+" alt="Before: on AWS the application's SQS SDK calls Amazon SQS. After: in the target cloud the same application and SDK call a Tensor9 adapter, which serves the SQS API from a durable Postgres table per queue." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24ncyBTUVMgU0RLIGNhbGxzIEFtYXpvbiBTUVMuIEFmdGVyOiBpbiB0aGUgdGFyZ2V0IGNsb3VkIHRoZSBzYW1lIGFwcGxpY2F0aW9uIGFuZCBTREsgY2FsbCBhIFRlbnNvcjkgYWRhcHRlciwgd2hpY2ggc2VydmVzIHRoZSBTUVMgQVBJIGZyb20gYSBkdXJhYmxlIFBvc3RncmVzIHRhYmxlIHBlciBxdWV1ZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9ImFoMSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQ2IiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjExOCIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iODAiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI5MCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEyLjVweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjkwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5TUVMgU0RLPC90ZXh0Pgo8bGluZSB4MT0iMTUwIiB5MT0iMTEzIiB4Mj0iMjEwIiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhaDEpIi8+Cjx0ZXh0IHg9IjE4MSIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZm9udC1zaXplOjguNXB4Ij5TUVMgQVBJPC90ZXh0Pgo8cmVjdCB4PSIyMTQiIHk9IjgwIiB3aWR0aD0iMTQ4IiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjg4IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+QW1hem9uIFNRUzwvdGV4dD4KPHRleHQgeD0iMjg4IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5BV1MtbWFuYWdlZDwvdGV4dD4KPGxpbmUgeDE9IjQxOCIgeTE9IjQwIiB4Mj0iNDE4IiB5Mj0iMTYwIiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxyZWN0IHg9IjQ2MiIgeT0iNDYiIHdpZHRoPSIzNjIiIGhlaWdodD0iMTE4IiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSI0NzYiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwZGVjOCI+T04gVEhFIFRBUkdFVCBDTE9VRDwvdGV4dD4KPHJlY3QgeD0iNDc0IiB5PSI4MCIgd2lkdGg9IjkyIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNTIwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjUyMCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnNhbWUgU0RLPC90ZXh0Pgo8bGluZSB4MT0iNTY2IiB5MT0iMTEzIiB4Mj0iNTkwIiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhaDEpIi8+CjxyZWN0IHg9IjU5NCIgeT0iNzYiIHdpZHRoPSIxMTAiIGhlaWdodD0iNzQiIHJ4PSIxMSIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI2NDkiIHk9IjEwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5UZW5zb3I5PC90ZXh0Pgo8dGV4dCB4PSI2NDkiIHk9IjExNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+c2VydmljZTwvdGV4dD4KPHRleHQgeD0iNjQ5IiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmFkYXB0ZXI8L3RleHQ+CjxsaW5lIHgxPSI3MDQiIHkxPSIxMTMiIHgyPSI3MjgiIHkyPSIxMTMiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2FoMSkiLz4KPHJlY3QgeD0iNzMyIiB5PSI4MCIgd2lkdGg9Ijg0IiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzc0IiB5PSIxMDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTFweCI+UG9zdGdyZXM8L3RleHQ+Cjx0ZXh0IHg9Ijc3NCIgeT0iMTI2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+dGFibGUgcGVyIHF1ZXVlPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS the application's SQS SDK calls Amazon SQS. After: in the target cloud the same application and SDK call a Tensor9 adapter, which serves the SQS API from a durable Postgres table per queue." />
</div>

<p className="t9-caption">The application keeps its SQS SDK. The adapter stores each queue in a PostgreSQL table.</p>

#### Architecture

The Rust adapter stores all durable state in PostgreSQL, including messages, claims and receipt handles. Instances can restart or scale out without a shared in-memory lock table, receiver pool or renewal loop. On Cloud SQL and Azure Flexible Server, it authenticates with short-lived Cloud SQL IAM or Microsoft Entra tokens generated in-process and passed as database passwords, without a static secret.

On the Postgres side, the compiler provisions **one database per appliance**, a catalog entry per queue, and **one durable table per declared queue**. Each message is a row holding the SQS body and its attributes, its message-group, a visibility deadline, a receipt handle, a receive count, and a sent-at timestamp; the table is indexed so the hot paths stay a single scan. A Standard queue claims eligible messages in arrival order, with best-effort ordering under concurrent traffic. A **dead-letter** queue is another queue table, and a background **retention reaper** physically removes rows past their retention.

CloudNativePG, Cloud SQL for PostgreSQL and Azure Flexible Server use the same adapter code and tables. Their operational difference is where data is stored: the managed servers are outside the appliance cluster, while CloudNativePG is inside it. See the rebuild limitation below.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjQ0IiB2aWV3Qm94PSIwIDAgODM2IDI0NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgYWRhcHRlciBzdG9yZXMgbWVzc2FnZXMsIHJlY2VpcHQgaGFuZGxlcywgcmVjZWl2ZSBjb3VudHMgYW5kIHZpc2liaWxpdHkgZGVhZGxpbmVzIGluIFBvc3RncmVTUUwuIEVhY2ggZGVjbGFyZWQgcXVldWUgaGFzIGEgdGFibGU7IGEgZGVhZC1sZXR0ZXIgcXVldWUgaXMgYW5vdGhlciB0YWJsZS4gQmFja2dyb3VuZCBjbGVhbnVwIGVuZm9yY2VzIHJldGVudGlvbi4gU3RhbmRhcmQgcXVldWVzIGNsYWltIGVsaWdpYmxlIG1lc3NhZ2VzIHdpdGggYmVzdC1lZmZvcnQgb3JkZXJpbmcuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJxYSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPHJlY3QgeD0iOCIgeT0iMjQiIHdpZHRoPSI4MjAiIGhlaWdodD0iMjA2IiByeD0iMTYiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIyNiIgeT0iNDQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4Ij5DVVNUT01FUidTIENMT1VEPC90ZXh0Pgo8cmVjdCB4PSIyNCIgeT0iMTA0IiB3aWR0aD0iOTYiIGhlaWdodD0iNzYiIHJ4PSIxMiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI3MiIgeT0iMTM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI3MiIgeT0iMTU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+U1FTIFNESzwvdGV4dD4KPHRleHQgeD0iNzIiIHk9IjE3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5Ij51bmNoYW5nZWQ8L3RleHQ+CjxsaW5lIHgxPSIxMjAiIHkxPSIxNDIiIHgyPSIxNTIiIHkyPSIxNDIiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3FhKSIvPgo8cmVjdCB4PSIxNTQiIHk9IjExMiIgd2lkdGg9IjE0MCIgaGVpZ2h0PSI2MCIgcng9IjEyIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjIyNCIgeT0iMTM4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEzcHgiPlRlbnNvcjkgbGF5ZXI8L3RleHQ+Cjx0ZXh0IHg9IjIyNCIgeT0iMTU2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5zdGF0ZSBpbiBQb3N0Z3JlU1FMPC90ZXh0Pgo8bGluZSB4MT0iMjk2IiB5MT0iMTQyIiB4Mj0iMzYwIiB5Mj0iMTQyIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNxYSkiLz4KPHRleHQgeD0iMzI4IiB5PSIxMzQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiIj5TUUw8L3RleHQ+Cjx0ZXh0IHg9IjMyOCIgeT0iMTU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YiI+a2V5bGVzczwvdGV4dD4KPHJlY3QgeD0iMzY0IiB5PSI1OCIgd2lkdGg9IjQ1NiIgaGVpZ2h0PSIxNjQiIHJ4PSIxMyIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNiIvPgo8dGV4dCB4PSI1OTEiIHk9IjgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEyLjVweCI+UG9zdGdyZVNRTDwvdGV4dD4KPHRleHQgeD0iNTkxIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6MTBweCAnU0YgTW9ubycsTWVubG8sbW9ub3NwYWNlO2ZpbGw6IzY0NzQ4YiI+b25lIGRhdGFiYXNlIHBlciBhcHBsaWFuY2Ugwrcgb25lIHRhYmxlIHBlciBxdWV1ZTwvdGV4dD4KPHJlY3QgeD0iMzgwIiB5PSIxMTAiIHdpZHRoPSIyMDYiIGhlaWdodD0iNzQiIHJ4PSIxMCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSI0ODMiIHk9IjEzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwO2ZpbGw6IzQ3NTU2OSI+bWVzc2FnZSByb3dzPC90ZXh0Pgo8dGV4dCB4PSI0ODMiIHk9IjE1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPm9uZSByb3cgcGVyIG1lc3NhZ2U8L3RleHQ+Cjx0ZXh0IHg9IjQ4MyIgeT0iMTcyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+Ym9keSDCtyBhdHRyaWJ1dGVzIMK3IHNlbmQgdGltZTwvdGV4dD4KPHJlY3QgeD0iNTk4IiB5PSIxMTAiIHdpZHRoPSIyMDYiIGhlaWdodD0iNzQiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSI3MDEiIHk9IjEzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj5yZWNlaXZlIGNsYWltczwvdGV4dD4KPHRleHQgeD0iNzAxIiB5PSIxNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPnJlY2VpcHQgwrcgdmlzaWJpbGl0eSBkZWFkbGluZTwvdGV4dD4KPHRleHQgeD0iNzAxIiB5PSIxNzIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPnJlY2VpdmUgY291bnQgwrcgY3VycmVudCBvd25lcjwvdGV4dD4KPHJlY3QgeD0iMzgwIiB5PSIxOTIiIHdpZHRoPSI0MzYiIGhlaWdodD0iMjIiIHJ4PSI2IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMSIvPgo8dGV4dCB4PSI1OTgiIHk9IjIwNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6OS41cHggJ1NGIE1vbm8nLE1lbmxvLG1vbm9zcGFjZTtmaWxsOiM0NzU1NjkiPm9uZSBiYWNrZW5kIMK3IHRocmVlIGhvc3RzOiBDTlBHIMK3IENsb3VkIFNRTCBQRyDCtyBBenVyZSBGbGV4aWJsZTwvdGV4dD4KPC9zdmc+" alt="The adapter stores messages, receipt handles, receive counts and visibility deadlines in PostgreSQL. Each declared queue has a table; a dead-letter queue is another table. Background cleanup enforces retention. Standard queues claim eligible messages with best-effort ordering." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjQ0IiB2aWV3Qm94PSIwIDAgODM2IDI0NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgYWRhcHRlciBzdG9yZXMgbWVzc2FnZXMsIHJlY2VpcHQgaGFuZGxlcywgcmVjZWl2ZSBjb3VudHMgYW5kIHZpc2liaWxpdHkgZGVhZGxpbmVzIGluIFBvc3RncmVTUUwuIEVhY2ggZGVjbGFyZWQgcXVldWUgaGFzIGEgdGFibGU7IGEgZGVhZC1sZXR0ZXIgcXVldWUgaXMgYW5vdGhlciB0YWJsZS4gQmFja2dyb3VuZCBjbGVhbnVwIGVuZm9yY2VzIHJldGVudGlvbi4gU3RhbmRhcmQgcXVldWVzIGNsYWltIGVsaWdpYmxlIG1lc3NhZ2VzIHdpdGggYmVzdC1lZmZvcnQgb3JkZXJpbmcuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJxYSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPHJlY3QgeD0iOCIgeT0iMjQiIHdpZHRoPSI4MjAiIGhlaWdodD0iMjA2IiByeD0iMTYiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIyNiIgeT0iNDQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4Ij5DVVNUT01FUidTIENMT1VEPC90ZXh0Pgo8cmVjdCB4PSIyNCIgeT0iMTA0IiB3aWR0aD0iOTYiIGhlaWdodD0iNzYiIHJ4PSIxMiIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI3MiIgeT0iMTM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI3MiIgeT0iMTU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+U1FTIFNESzwvdGV4dD4KPHRleHQgeD0iNzIiIHk9IjE3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM2Ij51bmNoYW5nZWQ8L3RleHQ+CjxsaW5lIHgxPSIxMjAiIHkxPSIxNDIiIHgyPSIxNTIiIHkyPSIxNDIiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3FhKSIvPgo8cmVjdCB4PSIxNTQiIHk9IjExMiIgd2lkdGg9IjE0MCIgaGVpZ2h0PSI2MCIgcng9IjEyIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjIyNCIgeT0iMTM4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEzcHgiPlRlbnNvcjkgbGF5ZXI8L3RleHQ+Cjx0ZXh0IHg9IjIyNCIgeT0iMTU2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5zdGF0ZSBpbiBQb3N0Z3JlU1FMPC90ZXh0Pgo8bGluZSB4MT0iMjk2IiB5MT0iMTQyIiB4Mj0iMzYwIiB5Mj0iMTQyIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNxYSkiLz4KPHRleHQgeD0iMzI4IiB5PSIxMzQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij5TUUw8L3RleHQ+Cjx0ZXh0IHg9IjMyOCIgeT0iMTU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkOCI+a2V5bGVzczwvdGV4dD4KPHJlY3QgeD0iMzY0IiB5PSI1OCIgd2lkdGg9IjQ1NiIgaGVpZ2h0PSIxNjQiIHJ4PSIxMyIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNiIvPgo8dGV4dCB4PSI1OTEiIHk9IjgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEyLjVweCI+UG9zdGdyZVNRTDwvdGV4dD4KPHRleHQgeD0iNTkxIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6MTBweCAnU0YgTW9ubycsTWVubG8sbW9ub3NwYWNlO2ZpbGw6ICNjOWNmZDgiPm9uZSBkYXRhYmFzZSBwZXIgYXBwbGlhbmNlIMK3IG9uZSB0YWJsZSBwZXIgcXVldWU8L3RleHQ+CjxyZWN0IHg9IjM4MCIgeT0iMTEwIiB3aWR0aD0iMjA2IiBoZWlnaHQ9Ijc0IiByeD0iMTAiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNDgzIiB5PSIxMzIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMDtmaWxsOiAjYzljZmQ4Ij5tZXNzYWdlIHJvd3M8L3RleHQ+Cjx0ZXh0IHg9IjQ4MyIgeT0iMTU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+b25lIHJvdyBwZXIgbWVzc2FnZTwvdGV4dD4KPHRleHQgeD0iNDgzIiB5PSIxNzIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5ib2R5IMK3IGF0dHJpYnV0ZXMgwrcgc2VuZCB0aW1lPC90ZXh0Pgo8cmVjdCB4PSI1OTgiIHk9IjExMCIgd2lkdGg9IjIwNiIgaGVpZ2h0PSI3NCIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjcwMSIgeT0iMTMyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPnJlY2VpdmUgY2xhaW1zPC90ZXh0Pgo8dGV4dCB4PSI3MDEiIHk9IjE1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+cmVjZWlwdCDCtyB2aXNpYmlsaXR5IGRlYWRsaW5lPC90ZXh0Pgo8dGV4dCB4PSI3MDEiIHk9IjE3MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+cmVjZWl2ZSBjb3VudCDCtyBjdXJyZW50IG93bmVyPC90ZXh0Pgo8cmVjdCB4PSIzODAiIHk9IjE5MiIgd2lkdGg9IjQzNiIgaGVpZ2h0PSIyMiIgcng9IjYiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxIi8+Cjx0ZXh0IHg9IjU5OCIgeT0iMjA3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDo5LjVweCAnU0YgTW9ubycsTWVubG8sbW9ub3NwYWNlO2ZpbGw6ICNjOWNmZDgiPm9uZSBiYWNrZW5kIMK3IHRocmVlIGhvc3RzOiBDTlBHIMK3IENsb3VkIFNRTCBQRyDCtyBBenVyZSBGbGV4aWJsZTwvdGV4dD4KPC9zdmc+" alt="The adapter stores messages, receipt handles, receive counts and visibility deadlines in PostgreSQL. Each declared queue has a table; a dead-letter queue is another table. Background cleanup enforces retention. Standard queues claim eligible messages with best-effort ordering." />
</div>

<p className="t9-caption">Each queue uses a PostgreSQL table, including dead-letter queues. The same adapter code runs against CloudNativePG, Cloud SQL for PostgreSQL and Azure Flexible Server.</p>

#### Receiving messages

In one SQL operation, the adapter selects messages whose visibility deadlines have passed, in arrival order and up to the requested batch size. It assigns each a fresh receipt handle, advances its visibility deadline, increments the receive count and returns the claimed rows. Rows locked by another receiver are skipped. Standard queues provide best-effort ordering. Visibility expiry permits redelivery; it does not stop a worker that is still processing an earlier receive.

`ApproximateReceiveCount` is the message's **real** receive count (the claim increments it; it is not estimated), and the SQS MD5-of-body and MD5-of-attributes are recomputed so your SDK verifies them byte-for-byte. `DelaySeconds` stamps the message's visibility deadline at send, so a delayed message remains unavailable until that deadline. A **long poll** is a poll loop bounded by `WaitTimeSeconds` (capped at 20s), returning the instant a claim succeeds. A `SendMessageBatch` is a single multi-row insert with faithful per-entry outcomes, and the message body is stored in the queue table. The adapter defaults to a 262144-byte (256 KiB) queue limit; managed SQS requests enforce the declared limit before sending. Native AWS SQS now supports messages up to 1 MiB.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjQwIiB2aWV3Qm94PSIwIDAgODM2IDI0MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpdmUgY2xhaW1zIG1lc3NhZ2VzIGluIG9uZSBhdG9taWMgc3RlcDogdGhlIGFkYXB0ZXIgdGFrZXMgdGhlIGhlYWQtb2YtcXVldWUgbWVzc2FnZXMgdGhhdCBhcmUgZHVlICh0aGVpciB2aXNpYmlsaXR5IGRlYWRsaW5lIGhhcyBwYXNzZWQpLCBpbiBhcnJpdmFsIG9yZGVyLCBhbmQgaW4gdGhlIHNhbWUgc3RlcCBhc3NpZ25zIGEgZnJlc2ggcmVjZWlwdCBoYW5kbGUsIHB1c2hlcyB0aGUgdmlzaWJpbGl0eSBkZWFkbGluZSBpbnRvIHRoZSBmdXR1cmUsIGFuZCBpbmNyZW1lbnRzIHRoZSByZWNlaXZlIGNvdW50LCByZXR1cm5pbmcgdGhlIGNsYWltZWQgbWVzc2FnZXMuIEVhY2ggcmVjZWl2ZXIgYXRvbWljYWxseSBjbGFpbXMgYSBkaWZmZXJlbnQgYmF0Y2ggb2YgZWxpZ2libGUgbWVzc2FnZXMuIE1lc3NhZ2VzIGNhbiBiZSByZWRlbGl2ZXJlZCB3aGVuIHRoZWlyIHZpc2liaWxpdHkgZXhwaXJlcy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0icmEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8bWFya2VyIGlkPSJyZyIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMDU5NjY5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8Y2lyY2xlIGN4PSI0MCIgY3k9IjYwIiByPSIxMyIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSI2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj4xPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iNDIiIHdpZHRoPSIzMDAiIGhlaWdodD0iNDgiIHJ4PSIxMCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI3NiIgeT0iNjIiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5IZWFkLW9mLXF1ZXVlIGNhbmRpZGF0ZXM8L3RleHQ+Cjx0ZXh0IHg9Ijc2IiB5PSI3OSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPjx0c3BhbiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZmlsbDojNDc1NTY5Ij52aXNpYmlsaXR5IGRlYWRsaW5lIHBhc3NlZDwvdHNwYW4+IMK3IGluIGFycml2YWwgb3JkZXI8L3RleHQ+CjxsaW5lIHgxPSIyMDAiIHkxPSI5MCIgeDI9IjIwMCIgeTI9IjExMiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNyYSkiLz4KPGNpcmNsZSBjeD0iNDAiIGN5PSIxMzQiIHI9IjEzIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PHRleHQgeD0iNDAiIHk9IjEzOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj4yPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iMTE2IiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjQ4IiByeD0iMTAiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNzYiIHk9IjEzNiIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMi41cHgiPkNsYWltIGF2YWlsYWJsZSBtZXNzYWdlczwvdGV4dD4KPHRleHQgeD0iNzYiIHk9IjE1MyIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnNraXAgcm93cyBhbHJlYWR5IGNsYWltZWQgYnkgYW5vdGhlciByZWNlaXZlcjwvdGV4dD4KPGxpbmUgeDE9IjIwMCIgeTE9IjE2NCIgeDI9IjIwMCIgeTI9IjE4NiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNyYSkiLz4KPGNpcmNsZSBjeD0iNDAiIGN5PSIyMDgiIHI9IjEzIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PHRleHQgeD0iNDAiIHk9IjIxMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj4zPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iMTkwIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjQ4IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzYiIHk9IjIxMCIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMnB4Ij5TYW1lIHN0ZXA6IGNsYWltIGFuZCByZXR1cm48L3RleHQ+Cjx0ZXh0IHg9Ijc2IiB5PSIyMjMiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPm5ldyBoYW5kbGUgwrcgc2V0IHZpc2liaWxpdHkgZGVhZGxpbmU8dHNwYW4geD0iNzYiIGR5PSIxMiI+aW5jcmVtZW50IHJlY2VpdmUgY291bnQ8L3RzcGFuPjwvdGV4dD4KPHJlY3QgeD0iMzg4IiB5PSI0MiIgd2lkdGg9IjQyNCIgaGVpZ2h0PSIxOTYiIHJ4PSIxMiIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSI2MDAiIHk9IjY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojNjQ3NDhiIj5UV08gQ09OQ1VSUkVOVCBSRUNFSVZFUlM8L3RleHQ+CjxyZWN0IHg9IjQwNCIgeT0iNzgiIHdpZHRoPSIxNTAiIGhlaWdodD0iMjQiIHJ4PSI2IiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS4yIi8+PHRleHQgeD0iNDc5IiB5PSI5NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj5SZWNlaXZlciBBIGNsYWltcyBtMTwvdGV4dD4KPHJlY3QgeD0iNDA0IiB5PSIxMDgiIHdpZHRoPSIxNTAiIGhlaWdodD0iMjQiIHJ4PSI2IiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS4yIi8+PHRleHQgeD0iNDc5IiB5PSIxMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+UmVjZWl2ZXIgQiBjbGFpbXMgbTI8L3RleHQ+CjxyZWN0IHg9IjYwMCIgeT0iNzgiIHdpZHRoPSIxOTYiIGhlaWdodD0iMjIiIHJ4PSI1IiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiLz48dGV4dCB4PSI2MTIiIHk9IjkzIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZmlsbDojNDc1NTY5Ij5tMSAgbG9ja2VkIGJ5IEE8L3RleHQ+CjxyZWN0IHg9IjYwMCIgeT0iMTA0IiB3aWR0aD0iMTk2IiBoZWlnaHQ9IjIyIiByeD0iNSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIi8+PHRleHQgeD0iNjEyIiB5PSIxMTkiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiM0NzU1NjkiPm0yICBsb2NrZWQgYnkgQjwvdGV4dD4KPHJlY3QgeD0iNjAwIiB5PSIxMzAiIHdpZHRoPSIxOTYiIGhlaWdodD0iMjIiIHJ4PSI1IiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiLz48dGV4dCB4PSI2MTIiIHk9IjE0NSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6Izk0YTNiOCI+bTMgIHZpc2libGUgwrcgbmV4dDwvdGV4dD4KPHJlY3QgeD0iNjAwIiB5PSIxNTYiIHdpZHRoPSIxOTYiIGhlaWdodD0iMjIiIHJ4PSI1IiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiLz48dGV4dCB4PSI2MTIiIHk9IjE3MSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6Izk0YTNiOCI+bTQgIHZpc2libGUgwrcgbmV4dDwvdGV4dD4KPGxpbmUgeDE9IjU1NiIgeTE9IjkwIiB4Mj0iNTk2IiB5Mj0iODgiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjcmcpIi8+CjxsaW5lIHgxPSI1NTYiIHkxPSIxMjAiIHgyPSI1OTYiIHkyPSIxMTQiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjcmcpIi8+CjxyZWN0IHg9IjQwNCIgeT0iMTk2IiB3aWR0aD0iMzkyIiBoZWlnaHQ9IjMwIiByeD0iOCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI2MDAiIHk9IjIxNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj5lYWNoIHJlY2VpdmVyIGNsYWltcyBkaWZmZXJlbnQgcm93czwvdGV4dD4KPC9zdmc+" alt="A receive claims messages in one atomic step: the adapter takes the head-of-queue messages that are due (their visibility deadline has passed), in arrival order, and in the same step assigns a fresh receipt handle, pushes the visibility deadline into the future, and increments the receive count, returning the claimed messages. Each receiver atomically claims a different batch of eligible messages. Messages can be redelivered when their visibility expires." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjQwIiB2aWV3Qm94PSIwIDAgODM2IDI0MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpdmUgY2xhaW1zIG1lc3NhZ2VzIGluIG9uZSBhdG9taWMgc3RlcDogdGhlIGFkYXB0ZXIgdGFrZXMgdGhlIGhlYWQtb2YtcXVldWUgbWVzc2FnZXMgdGhhdCBhcmUgZHVlICh0aGVpciB2aXNpYmlsaXR5IGRlYWRsaW5lIGhhcyBwYXNzZWQpLCBpbiBhcnJpdmFsIG9yZGVyLCBhbmQgaW4gdGhlIHNhbWUgc3RlcCBhc3NpZ25zIGEgZnJlc2ggcmVjZWlwdCBoYW5kbGUsIHB1c2hlcyB0aGUgdmlzaWJpbGl0eSBkZWFkbGluZSBpbnRvIHRoZSBmdXR1cmUsIGFuZCBpbmNyZW1lbnRzIHRoZSByZWNlaXZlIGNvdW50LCByZXR1cm5pbmcgdGhlIGNsYWltZWQgbWVzc2FnZXMuIEVhY2ggcmVjZWl2ZXIgYXRvbWljYWxseSBjbGFpbXMgYSBkaWZmZXJlbnQgYmF0Y2ggb2YgZWxpZ2libGUgbWVzc2FnZXMuIE1lc3NhZ2VzIGNhbiBiZSByZWRlbGl2ZXJlZCB3aGVuIHRoZWlyIHZpc2liaWxpdHkgZXhwaXJlcy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0icmEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8bWFya2VyIGlkPSJyZyIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMjBmN2I0Ii8+PC9tYXJrZXI+PC9kZWZzPgo8Y2lyY2xlIGN4PSI0MCIgY3k9IjYwIiByPSIxMyIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSI2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj4xPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iNDIiIHdpZHRoPSIzMDAiIGhlaWdodD0iNDgiIHJ4PSIxMCIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI3NiIgeT0iNjIiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5IZWFkLW9mLXF1ZXVlIGNhbmRpZGF0ZXM8L3RleHQ+Cjx0ZXh0IHg9Ijc2IiB5PSI3OSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPjx0c3BhbiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2M5Y2ZkOCI+dmlzaWJpbGl0eSBkZWFkbGluZSBwYXNzZWQ8L3RzcGFuPiDCtyBpbiBhcnJpdmFsIG9yZGVyPC90ZXh0Pgo8bGluZSB4MT0iMjAwIiB5MT0iOTAiIHgyPSIyMDAiIHkyPSIxMTIiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcmEpIi8+CjxjaXJjbGUgY3g9IjQwIiBjeT0iMTM0IiByPSIxMyIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSIxMzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+MjwvdGV4dD4KPHJlY3QgeD0iNjIiIHk9IjExNiIgd2lkdGg9IjMwMCIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSIxMzYiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5DbGFpbSBhdmFpbGFibGUgbWVzc2FnZXM8L3RleHQ+Cjx0ZXh0IHg9Ijc2IiB5PSIxNTMiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5za2lwIHJvd3MgYWxyZWFkeSBjbGFpbWVkIGJ5IGFub3RoZXIgcmVjZWl2ZXI8L3RleHQ+CjxsaW5lIHgxPSIyMDAiIHkxPSIxNjQiIHgyPSIyMDAiIHkyPSIxODYiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcmEpIi8+CjxjaXJjbGUgY3g9IjQwIiBjeT0iMjA4IiByPSIxMyIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSIyMTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+MzwvdGV4dD4KPHJlY3QgeD0iNjIiIHk9IjE5MCIgd2lkdGg9IjMwMCIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSIyMTAiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTJweCI+U2FtZSBzdGVwOiBjbGFpbSBhbmQgcmV0dXJuPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iMjIzIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5uZXcgaGFuZGxlIMK3IHNldCB2aXNpYmlsaXR5IGRlYWRsaW5lPHRzcGFuIHg9Ijc2IiBkeT0iMTIiPmluY3JlbWVudCByZWNlaXZlIGNvdW50PC90c3Bhbj48L3RleHQ+CjxyZWN0IHg9IjM4OCIgeT0iNDIiIHdpZHRoPSI0MjQiIGhlaWdodD0iMTk2IiByeD0iMTIiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNjAwIiB5PSI2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICNjOWNmZDgiPlRXTyBDT05DVVJSRU5UIFJFQ0VJVkVSUzwvdGV4dD4KPHJlY3QgeD0iNDA0IiB5PSI3OCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIyNCIgcng9IjYiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz48dGV4dCB4PSI0NzkiIHk9Ijk0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPlJlY2VpdmVyIEEgY2xhaW1zIG0xPC90ZXh0Pgo8cmVjdCB4PSI0MDQiIHk9IjEwOCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIyNCIgcng9IjYiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz48dGV4dCB4PSI0NzkiIHk9IjEyNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj5SZWNlaXZlciBCIGNsYWltcyBtMjwvdGV4dD4KPHJlY3QgeD0iNjAwIiB5PSI3OCIgd2lkdGg9IjE5NiIgaGVpZ2h0PSIyMiIgcng9IjUiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIvPjx0ZXh0IHg9IjYxMiIgeT0iOTMiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjYzljZmQ4Ij5tMSAgbG9ja2VkIGJ5IEE8L3RleHQ+CjxyZWN0IHg9IjYwMCIgeT0iMTA0IiB3aWR0aD0iMTk2IiBoZWlnaHQ9IjIyIiByeD0iNSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2Ii8+PHRleHQgeD0iNjEyIiB5PSIxMTkiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjYzljZmQ4Ij5tMiAgbG9ja2VkIGJ5IEI8L3RleHQ+CjxyZWN0IHg9IjYwMCIgeT0iMTMwIiB3aWR0aD0iMTk2IiBoZWlnaHQ9IjIyIiByeD0iNSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2Ii8+PHRleHQgeD0iNjEyIiB5PSIxNDUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTRhM2I4Ij5tMyAgdmlzaWJsZSDCtyBuZXh0PC90ZXh0Pgo8cmVjdCB4PSI2MDAiIHk9IjE1NiIgd2lkdGg9IjE5NiIgaGVpZ2h0PSIyMiIgcng9IjUiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIvPjx0ZXh0IHg9IjYxMiIgeT0iMTcxIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzk0YTNiOCI+bTQgIHZpc2libGUgwrcgbmV4dDwvdGV4dD4KPGxpbmUgeDE9IjU1NiIgeTE9IjkwIiB4Mj0iNTk2IiB5Mj0iODgiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjcmcpIi8+CjxsaW5lIHgxPSI1NTYiIHkxPSIxMjAiIHgyPSI1OTYiIHkyPSIxMTQiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjcmcpIi8+CjxyZWN0IHg9IjQwNCIgeT0iMTk2IiB3aWR0aD0iMzkyIiBoZWlnaHQ9IjMwIiByeD0iOCIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI2MDAiIHk9IjIxNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj5lYWNoIHJlY2VpdmVyIGNsYWltcyBkaWZmZXJlbnQgcm93czwvdGV4dD4KPC9zdmc+" alt="A receive claims messages in one atomic step: the adapter takes the head-of-queue messages that are due (their visibility deadline has passed), in arrival order, and in the same step assigns a fresh receipt handle, pushes the visibility deadline into the future, and increments the receive count, returning the claimed messages. Each receiver atomically claims a different batch of eligible messages. Messages can be redelivered when their visibility expires." />
</div>

<p className="t9-caption">Concurrent receives use atomic row claims and skip rows locked by another receiver. ApproximateReceiveCount is the message's real receive count.</p>

#### Receipt handles & visibility

Receiving writes a receipt token to the message row. `DeleteMessage` and `ChangeMessageVisibility` find that row by its token, including after an adapter restart or through another adapter instance. No in-memory receiver or broker lock is required.

A delete or visibility change with no matching row returns `ReceiptHandleIsInvalid`. This includes messages already deleted or claimed again under a newer token. Visibility is a timestamp on the row, defaulting to 30 seconds on receive. `ChangeMessageVisibility` can extend it without a broker lock-duration maximum; zero makes the message immediately available to claim again. Retention can delete a message while it is in flight, and a newer claim makes the old token stale.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpcHQgaGFuZGxlIGlzIGEgZHVyYWJsZSB0b2tlbiBzdG9yZWQgb24gdGhlIG1lc3NhZ2UncyBvd24gcm93LCBhIHN0YWJsZSBpZCBzdGFtcGVkIG9uIGl0LCB3aXRoIG5vIGluLW1lbW9yeSBicm9rZXIgbG9jayBiZWhpbmQgaXQsIHNvIGl0IHJlc29sdmVzIHRoZSBzYW1lIGFmdGVyIGFuIGFkYXB0ZXIgcmVzdGFydDogRGVsZXRlIGFuZCBDaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSBmaW5kIHRoZSBtZXNzYWdlIGFnYWluIGJ5IHRoYXQgdG9rZW4uIFRoZSB2aXNpYmlsaXR5IHRpbWVvdXQgaXMgYSB0aW1lc3RhbXAgb24gdGhlIHJvdyB3aXRoIG5vIGNlaWxpbmc6IENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5IHB1c2hlcyBpdCBmb3J3YXJkIHdpdGggbm8gY2FwLCB3aGVyZSBhIGJyb2tlci1iYWNrZWQgYmFja2VuZCB3b3VsZCBzdG9wIGF0IGl0cyBsb2NrIGNlaWxpbmcuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9InZhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiMwNTk2NjkiLz48L21hcmtlcj48L2RlZnM+Cjx0ZXh0IHg9IjI2IiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+RFVSQUJMRSBST1ctVE9LRU4gSEFORExFPC90ZXh0Pgo8cmVjdCB4PSIyNiIgeT0iMzgiIHdpZHRoPSIzNjAiIGhlaWdodD0iMTQyIiByeD0iMTQiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHJlY3QgeD0iNDQiIHk9IjU4IiB3aWR0aD0iMzI0IiBoZWlnaHQ9IjM0IiByeD0iOCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSIyMDYiIHk9IjgwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZmlsbDojMDQ3ODU3Ij5yZWNlaXB0IGhhbmRsZSA9IDNmMmHigKYtOTFhMiAgKGEgZHVyYWJsZSB0b2tlbik8L3RleHQ+Cjx0ZXh0IHg9IjIwNiIgeT0iMTEyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+cGVyc2lzdGVkIGluIHRoZSByb3csIG5vdCBhbiBpbi1tZW1vcnkgYnJva2VyIGxvY2s8L3RleHQ+CjxsaW5lIHgxPSIyMDYiIHkxPSIxMjAiIHgyPSIyMDYiIHkyPSIxMzYiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIxLjYiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMyIvPgo8dGV4dCB4PSIyMDYiIHk9IjE0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj4tIGFkYXB0ZXIgcmVzdGFydCAtPC90ZXh0Pgo8dGV4dCB4PSIyMDYiIHk9IjE2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5Ij5yZXNvbHZlcyB0aGUgc2FtZTogRGVsZXRlIC8gQ2hhbmdlVmlzaWJpbGl0eSBmaW5kIGl0IGJ5IHRoYXQgdG9rZW48L3RleHQ+CjxsaW5lIHgxPSIzOTgiIHkxPSIzNCIgeDI9IjM5OCIgeTI9IjE4NCIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI0MjQiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojNjQ3NDhiIj5VTkNBUFBFRCBWSVNJQklMSVRZPC90ZXh0Pgo8cmVjdCB4PSI0MjQiIHk9IjM4IiB3aWR0aD0iMzg2IiBoZWlnaHQ9IjE0MiIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxsaW5lIHgxPSI0NDYiIHkxPSIxMDQiIHgyPSI4MDYiIHkyPSIxMDQiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIyIi8+CjxyZWN0IHg9IjQ0NiIgeT0iODgiIHdpZHRoPSI3OCIgaGVpZ2h0PSIxOCIgcng9IjQiIGZpbGw9IiNhN2YzZDAiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxyZWN0IHg9IjUyOCIgeT0iODgiIHdpZHRoPSI3OCIgaGVpZ2h0PSIxOCIgcng9IjQiIGZpbGw9IiM2ZWU3YjciIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxyZWN0IHg9IjYxMCIgeT0iODgiIHdpZHRoPSIxMjAiIGhlaWdodD0iMTgiIHJ4PSI0IiBmaWxsPSIjMTBiOTgxIiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNzM0IiB5MT0iOTciIHgyPSI4MDAiIHkyPSI5NyIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjdmEpIi8+Cjx0ZXh0IHg9IjQ4NCIgeT0iODAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiIj5kZWFkbGluZTwvdGV4dD4KPHRleHQgeD0iNTY2IiB5PSI4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGI7IGZpbGw6IzA1OTY2OSI+K2V4dGVuZDwvdGV4dD4KPHRleHQgeD0iNjY4IiB5PSI4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGI7IGZpbGw6IzA1OTY2OSI+K2V4dGVuZDwvdGV4dD4KPHRleHQgeD0iNzcyIiB5PSI4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj5ubyBjYXA8L3RleHQ+Cjx0ZXh0IHg9IjYxNyIgeT0iMTM0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHkgcHVzaGVzIHRoZSBkZWFkbGluZSBmb3J3YXJkLCBubyBjZWlsaW5nPC90ZXh0Pgo8dGV4dCB4PSI2MTciIHk9IjE1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZpbGw6Izk0YTNiOCI+KGEgYnJva2VyLWJhY2tlZCBiYWNrZW5kIHdvdWxkIHN0b3AgYXQgaXRzIGxvY2sgY2VpbGluZyk8L3RleHQ+Cjwvc3ZnPg==" alt="A receipt handle is a durable token stored on the message's own row, a stable id stamped on it, with no in-memory broker lock behind it, so it resolves the same after an adapter restart: Delete and ChangeMessageVisibility find the message again by that token. The visibility timeout is a timestamp on the row with no ceiling: ChangeMessageVisibility pushes it forward with no cap, where a broker-backed backend would stop at its lock ceiling." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpcHQgaGFuZGxlIGlzIGEgZHVyYWJsZSB0b2tlbiBzdG9yZWQgb24gdGhlIG1lc3NhZ2UncyBvd24gcm93LCBhIHN0YWJsZSBpZCBzdGFtcGVkIG9uIGl0LCB3aXRoIG5vIGluLW1lbW9yeSBicm9rZXIgbG9jayBiZWhpbmQgaXQsIHNvIGl0IHJlc29sdmVzIHRoZSBzYW1lIGFmdGVyIGFuIGFkYXB0ZXIgcmVzdGFydDogRGVsZXRlIGFuZCBDaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSBmaW5kIHRoZSBtZXNzYWdlIGFnYWluIGJ5IHRoYXQgdG9rZW4uIFRoZSB2aXNpYmlsaXR5IHRpbWVvdXQgaXMgYSB0aW1lc3RhbXAgb24gdGhlIHJvdyB3aXRoIG5vIGNlaWxpbmc6IENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5IHB1c2hlcyBpdCBmb3J3YXJkIHdpdGggbm8gY2FwLCB3aGVyZSBhIGJyb2tlci1iYWNrZWQgYmFja2VuZCB3b3VsZCBzdG9wIGF0IGl0cyBsb2NrIGNlaWxpbmcuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9InZhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiMyMGY3YjQiLz48L21hcmtlcj48L2RlZnM+Cjx0ZXh0IHg9IjI2IiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPkRVUkFCTEUgUk9XLVRPS0VOIEhBTkRMRTwvdGV4dD4KPHJlY3QgeD0iMjYiIHk9IjM4IiB3aWR0aD0iMzYwIiBoZWlnaHQ9IjE0MiIgcng9IjE0IiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+CjxyZWN0IHg9IjQ0IiB5PSI1OCIgd2lkdGg9IjMyNCIgaGVpZ2h0PSIzNCIgcng9IjgiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMjA2IiB5PSI4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICM5MGRlYzgiPnJlY2VpcHQgaGFuZGxlID0gM2YyYeKApi05MWEyICAoYSBkdXJhYmxlIHRva2VuKTwvdGV4dD4KPHRleHQgeD0iMjA2IiB5PSIxMTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5wZXJzaXN0ZWQgaW4gdGhlIHJvdywgbm90IGFuIGluLW1lbW9yeSBicm9rZXIgbG9jazwvdGV4dD4KPGxpbmUgeDE9IjIwNiIgeTE9IjEyMCIgeDI9IjIwNiIgeTI9IjEzNiIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjEuNiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAzIi8+Cjx0ZXh0IHg9IjIwNiIgeT0iMTQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPi0gYWRhcHRlciByZXN0YXJ0IC08L3RleHQ+Cjx0ZXh0IHg9IjIwNiIgeT0iMTY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnJlc29sdmVzIHRoZSBzYW1lOiBEZWxldGUgLyBDaGFuZ2VWaXNpYmlsaXR5IGZpbmQgaXQgYnkgdGhhdCB0b2tlbjwvdGV4dD4KPGxpbmUgeDE9IjM5OCIgeTE9IjM0IiB4Mj0iMzk4IiB5Mj0iMTg0IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjQyNCIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjYzljZmQ4Ij5VTkNBUFBFRCBWSVNJQklMSVRZPC90ZXh0Pgo8cmVjdCB4PSI0MjQiIHk9IjM4IiB3aWR0aD0iMzg2IiBoZWlnaHQ9IjE0MiIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxsaW5lIHgxPSI0NDYiIHkxPSIxMDQiIHgyPSI4MDYiIHkyPSIxMDQiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIyIi8+CjxyZWN0IHg9IjQ0NiIgeT0iODgiIHdpZHRoPSI3OCIgaGVpZ2h0PSIxOCIgcng9IjQiIGZpbGw9IiMxYTMxMjciIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxyZWN0IHg9IjUyOCIgeT0iODgiIHdpZHRoPSI3OCIgaGVpZ2h0PSIxOCIgcng9IjQiIGZpbGw9IiMxYTMxMjgiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxyZWN0IHg9IjYxMCIgeT0iODgiIHdpZHRoPSIxMjAiIGhlaWdodD0iMTgiIHJ4PSI0IiBmaWxsPSIjMTBiOTgxIiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNzM0IiB5MT0iOTciIHgyPSI4MDAiIHkyPSI5NyIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjdmEpIi8+Cjx0ZXh0IHg9IjQ4NCIgeT0iODAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij5kZWFkbGluZTwvdGV4dD4KPHRleHQgeD0iNTY2IiB5PSI4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICM5MGRlYzYiPitleHRlbmQ8L3RleHQ+Cjx0ZXh0IHg9IjY2OCIgeT0iODAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBkZWM2Ij4rZXh0ZW5kPC90ZXh0Pgo8dGV4dCB4PSI3NzIiIHk9IjgwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPm5vIGNhcDwvdGV4dD4KPHRleHQgeD0iNjE3IiB5PSIxMzQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5DaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSBwdXNoZXMgdGhlIGRlYWRsaW5lIGZvcndhcmQsIG5vIGNlaWxpbmc8L3RleHQ+Cjx0ZXh0IHg9IjYxNyIgeT0iMTU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzk0YTNiOCI+KGEgYnJva2VyLWJhY2tlZCBiYWNrZW5kIHdvdWxkIHN0b3AgYXQgaXRzIGxvY2sgY2VpbGluZyk8L3RleHQ+Cjwvc3ZnPg==" alt="A receipt handle is a durable token stored on the message's own row, a stable id stamped on it, with no in-memory broker lock behind it, so it resolves the same after an adapter restart: Delete and ChangeMessageVisibility find the message again by that token. The visibility timeout is a timestamp on the row with no ceiling: ChangeMessageVisibility pushes it forward with no cap, where a broker-backed backend would stop at its lock ceiling." />
</div>

<p className="t9-caption">Receipt handles are stored with messages, so they remain usable after an adapter restart. Visibility deadlines have no broker lock-duration limit.</p>

#### Dead-letter & retention

During receive, one database transaction moves messages at or past `maxReceiveCount` from the source table to the dead-letter table and claims the remaining candidates. The move and claim commit together, so an interrupted transaction cannot leave a message deleted from the source without its DLQ copy. The DLQ uses the same queue operations and retention cleanup. Moved messages start with a reset receive count.

A background cleanup task deletes messages whose send time is older than the queue's retention period, including messages in flight. Receiving does not change that timestamp. Cleanup reads the stored retention attribute, defaults to four days and clamps it to 60 seconds–14 days. A missing or invalidly short value therefore cannot delete newly sent messages immediately. One worker per database runs each cleanup pass in batches, backs off during database maintenance and isolates queue errors. A circuit breaker and per-batch time limit bound the work.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjQwIiB2aWV3Qm94PSIwIDAgODM2IDI0MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJEZWFkLWxldHRlciBhbmQgcmV0ZW50aW9uLiBBIHNpbmdsZSBhdG9taWMgb3BlcmF0aW9uIGJvdGggY2xhaW1zIGxpdmUgbWVzc2FnZXMgYW5kIHJlZHJpdmVzIHBvaXNvbiBvbmVzOiBmcm9tIHRoZSBsb2NrZWQgaGVhZC1vZi1xdWV1ZSBzZXQsIG1lc3NhZ2VzIGF0IG9yIHBhc3QgbWF4UmVjZWl2ZUNvdW50IGFyZSBtb3ZlZCBmcm9tIHRoZSBzb3VyY2UgaW50byB0aGUgZGVhZC1sZXR0ZXIgcXVldWUgYW5kIHRoZSByZXN0IGFyZSBjbGFpbWVkIGFuZCByZXR1cm5lZCwgaW4gb25lIHRyYW5zYWN0aW9uLCBzbyB0aGUgbW92ZSBhbmQgY2xhaW1zIGNvbW1pdCB0b2dldGhlci4gVGhpcyBkb2VzIG5vdCBwcmV2ZW50IGNvbnN1bWVyIHJlZGVsaXZlcnkgYWZ0ZXIgdmlzaWJpbGl0eSBleHBpcnkuIFNlcGFyYXRlbHksIGEgYmFja2dyb3VuZCByZXRlbnRpb24gcmVhcGVyIHJlbW92ZXMgbWVzc2FnZXMgd2hvc2Ugc2VuZCB0aW1lIGlzIG9sZGVyIHRoYW4gdGhlIHF1ZXVlJ3MgcmV0ZW50aW9uLCBjbGFtcGVkIGJldHdlZW4gNjAgc2Vjb25kcyBhbmQgMTQgZGF5cy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZGEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzA1OTY2OSIvPjwvbWFya2VyPgo8bWFya2VyIGlkPSJkeCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjZGMyNjI2Ii8+PC9tYXJrZXI+PC9kZWZzPgo8dGV4dCB4PSIyNiIgeT0iMjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPk9ORSBBVE9NSUMgTU9WRSDCtyBNQVgtUkVDRUlWRSBSRURSSVZFPC90ZXh0Pgo8cmVjdCB4PSIyNiIgeT0iMzQiIHdpZHRoPSIxNTAiIGhlaWdodD0iNTQiIHJ4PSIxMCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxMDEiIHk9IjU1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExcHgiPmhlYWQtb2YtcXVldWUgc2V0PC90ZXh0Pgo8dGV4dCB4PSIxMDEiIHk9IjczIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZmlsbDojNDc1NTY5Ij5jbGFpbWVkIGF0b21pY2FsbHk8L3RleHQ+CjxsaW5lIHgxPSIxNzYiIHkxPSI1MCIgeDI9IjIxMiIgeTI9IjUwIiBzdHJva2U9IiNkYzI2MjYiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2R4KSIvPgo8dGV4dCB4PSIxOTQiIHk9IjQzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZmlsbDojYjkxYzFjIj7iiaUgbWF4PC90ZXh0Pgo8bGluZSB4MT0iMTc2IiB5MT0iNzQiIHgyPSIyMTIiIHkyPSI3NCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNkYSkiLz4KPHRleHQgeD0iMTk0IiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGI7IGZpbGw6IzA1OTY2OSI+Jmx0OyBtYXg8L3RleHQ+CjxyZWN0IHg9IjIxNCIgeT0iMzIiIHdpZHRoPSIyMjIiIGhlaWdodD0iMzIiIHJ4PSI5IiBmaWxsPSIjZmZmYmViIiBzdHJva2U9IiNmZGU2OGEiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjMyNSIgeT0iNTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OjYwMCAxMXB4IEludGVyLHNhbnMtc2VyaWY7ZmlsbDojYjQ1MzA5Ij5tb3ZlIHRvIGRlYWQtbGV0dGVyIHF1ZXVlPC90ZXh0Pgo8cmVjdCB4PSIyMTQiIHk9IjY2IiB3aWR0aD0iMjIyIiBoZWlnaHQ9IjMwIiByeD0iOSIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSIzMjUiIHk9Ijg1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPmNsYWltICsgcmV0dXJuIChzdGlsbCBsaXZlKTwvdGV4dD4KPHJlY3QgeD0iNDUyIiB5PSIzMiIgd2lkdGg9IjM1OCIgaGVpZ2h0PSI2NCIgcng9IjExIiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjYzMSIgeT0iNTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTFweCI+b25lIGF0b21pYyBvcGVyYXRpb248L3RleHQ+Cjx0ZXh0IHg9IjYzMSIgeT0iNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+bW92ZSArIGNsYWltIHRvZ2V0aGVyLCB0cmFuc2FjdGlvbmFsPC90ZXh0Pgo8dGV4dCB4PSIyNiIgeT0iMTI4IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojNjQ3NDhiIj5SRVRFTlRJT04gQ0xFQU5VUCDCtyBPTiBTRU5EIFRJTUU8L3RleHQ+CjxyZWN0IHg9IjI2IiB5PSIxMzgiIHdpZHRoPSI3ODQiIGhlaWdodD0iOTIiIHJ4PSIxMiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8cmVjdCB4PSI2MCIgeT0iMTY2IiB3aWR0aD0iMzYwIiBoZWlnaHQ9IjIwIiByeD0iNCIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjZGMyNjI2IiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iNDIwIiB5PSIxNjYiIHdpZHRoPSIzNTAiIGhlaWdodD0iMjAiIHJ4PSI0IiBmaWxsPSIjZDFmYWU1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDIwIiB5MT0iMTU2IiB4Mj0iNDIwIiB5Mj0iMTk4IiBzdHJva2U9IiMzMzQxNTUiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI0IDMiLz4KPHRleHQgeD0iNDIwIiB5PSIxNTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiMzMzQxNTUiPm5vdyDiiJIgcmV0ZW50aW9uPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjE4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6I2I5MWMxYyI+c2VuZCB0aW1lIGJlZm9yZSBjdXRvZmYg4oaSIHJlbW92ZWQ8L3RleHQ+Cjx0ZXh0IHg9IjU5NSIgeT0iMTgwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZmlsbDojMDQ3ODU3Ij53aXRoaW4gcmV0ZW50aW9uIOKGkiBrZXB0PC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjIxOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnJldGVudGlvbiA2MHMtMTRkIMK3IGJhdGNoZWQgY2xlYW51cCDCtyBvbmUgd29ya2VyIHBlciBkYXRhYmFzZSDCtyBiYWNrcyBvZmYgZHVyaW5nIG1haW50ZW5hbmNlPC90ZXh0Pgo8L3N2Zz4=" alt="Dead-letter and retention. A single atomic operation both claims live messages and redrives poison ones: from the locked head-of-queue set, messages at or past maxReceiveCount are moved from the source into the dead-letter queue and the rest are claimed and returned, in one transaction, so the move and claims commit together. This does not prevent consumer redelivery after visibility expiry. Separately, a background retention reaper removes messages whose send time is older than the queue's retention, clamped between 60 seconds and 14 days." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjQwIiB2aWV3Qm94PSIwIDAgODM2IDI0MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJEZWFkLWxldHRlciBhbmQgcmV0ZW50aW9uLiBBIHNpbmdsZSBhdG9taWMgb3BlcmF0aW9uIGJvdGggY2xhaW1zIGxpdmUgbWVzc2FnZXMgYW5kIHJlZHJpdmVzIHBvaXNvbiBvbmVzOiBmcm9tIHRoZSBsb2NrZWQgaGVhZC1vZi1xdWV1ZSBzZXQsIG1lc3NhZ2VzIGF0IG9yIHBhc3QgbWF4UmVjZWl2ZUNvdW50IGFyZSBtb3ZlZCBmcm9tIHRoZSBzb3VyY2UgaW50byB0aGUgZGVhZC1sZXR0ZXIgcXVldWUgYW5kIHRoZSByZXN0IGFyZSBjbGFpbWVkIGFuZCByZXR1cm5lZCwgaW4gb25lIHRyYW5zYWN0aW9uLCBzbyB0aGUgbW92ZSBhbmQgY2xhaW1zIGNvbW1pdCB0b2dldGhlci4gVGhpcyBkb2VzIG5vdCBwcmV2ZW50IGNvbnN1bWVyIHJlZGVsaXZlcnkgYWZ0ZXIgdmlzaWJpbGl0eSBleHBpcnkuIFNlcGFyYXRlbHksIGEgYmFja2dyb3VuZCByZXRlbnRpb24gcmVhcGVyIHJlbW92ZXMgbWVzc2FnZXMgd2hvc2Ugc2VuZCB0aW1lIGlzIG9sZGVyIHRoYW4gdGhlIHF1ZXVlJ3MgcmV0ZW50aW9uLCBjbGFtcGVkIGJldHdlZW4gNjAgc2Vjb25kcyBhbmQgMTQgZGF5cy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZGEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzIwZjdiNCIvPjwvbWFya2VyPgo8bWFya2VyIGlkPSJkeCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjZGMyNjI2Ii8+PC9tYXJrZXI+PC9kZWZzPgo8dGV4dCB4PSIyNiIgeT0iMjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5PTkUgQVRPTUlDIE1PVkUgwrcgTUFYLVJFQ0VJVkUgUkVEUklWRTwvdGV4dD4KPHJlY3QgeD0iMjYiIHk9IjM0IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjU0IiByeD0iMTAiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMTAxIiB5PSI1NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMXB4Ij5oZWFkLW9mLXF1ZXVlIHNldDwvdGV4dD4KPHRleHQgeD0iMTAxIiB5PSI3MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNjOWNmZDgiPmNsYWltZWQgYXRvbWljYWxseTwvdGV4dD4KPGxpbmUgeDE9IjE3NiIgeTE9IjUwIiB4Mj0iMjEyIiB5Mj0iNTAiIHN0cm9rZT0iI2RjMjYyNiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjZHgpIi8+Cjx0ZXh0IHg9IjE5NCIgeT0iNDMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGU5MDkwIj7iiaUgbWF4PC90ZXh0Pgo8bGluZSB4MT0iMTc2IiB5MT0iNzQiIHgyPSIyMTIiIHkyPSI3NCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNkYSkiLz4KPHRleHQgeD0iMTk0IiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICM5MGRlYzYiPiZsdDsgbWF4PC90ZXh0Pgo8cmVjdCB4PSIyMTQiIHk9IjMyIiB3aWR0aD0iMjIyIiBoZWlnaHQ9IjMyIiByeD0iOSIgZmlsbD0iIzMxMmQxYSIgc3Ryb2tlPSIjNjY1ZDNkIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSIzMjUiIHk9IjUyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDo2MDAgMTFweCBJbnRlcixzYW5zLXNlcmlmO2ZpbGw6ICNkZWIyOTAiPm1vdmUgdG8gZGVhZC1sZXR0ZXIgcXVldWU8L3RleHQ+CjxyZWN0IHg9IjIxNCIgeT0iNjYiIHdpZHRoPSIyMjIiIGhlaWdodD0iMzAiIHJ4PSI5IiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjMyNSIgeT0iODUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+Y2xhaW0gKyByZXR1cm4gKHN0aWxsIGxpdmUpPC90ZXh0Pgo8cmVjdCB4PSI0NTIiIHk9IjMyIiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjY0IiByeD0iMTEiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNjMxIiB5PSI1OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMXB4Ij5vbmUgYXRvbWljIG9wZXJhdGlvbjwvdGV4dD4KPHRleHQgeD0iNjMxIiB5PSI3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj5tb3ZlICsgY2xhaW0gdG9nZXRoZXIsIHRyYW5zYWN0aW9uYWw8L3RleHQ+Cjx0ZXh0IHg9IjI2IiB5PSIxMjgiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjYzljZmQ4Ij5SRVRFTlRJT04gQ0xFQU5VUCDCtyBPTiBTRU5EIFRJTUU8L3RleHQ+CjxyZWN0IHg9IjI2IiB5PSIxMzgiIHdpZHRoPSI3ODQiIGhlaWdodD0iOTIiIHJ4PSIxMiIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8cmVjdCB4PSI2MCIgeT0iMTY2IiB3aWR0aD0iMzYwIiBoZWlnaHQ9IjIwIiByeD0iNCIgZmlsbD0iIzMxMWExYSIgc3Ryb2tlPSIjZGMyNjI2IiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iNDIwIiB5PSIxNjYiIHdpZHRoPSIzNTAiIGhlaWdodD0iMjAiIHJ4PSI0IiBmaWxsPSIjMWEzMTI1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDIwIiB5MT0iMTU2IiB4Mj0iNDIwIiB5Mj0iMTk4IiBzdHJva2U9IiMzMzQxNTUiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI0IDMiLz4KPHRleHQgeD0iNDIwIiB5PSIxNTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjYzljZmQ4Ij5ub3cg4oiSIHJldGVudGlvbjwvdGV4dD4KPHRleHQgeD0iMjQwIiB5PSIxODAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGU5MDkwIj5zZW5kIHRpbWUgYmVmb3JlIGN1dG9mZiDihpIgcmVtb3ZlZDwvdGV4dD4KPHRleHQgeD0iNTk1IiB5PSIxODAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBkZWM4Ij53aXRoaW4gcmV0ZW50aW9uIOKGkiBrZXB0PC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjIxOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnJldGVudGlvbiA2MHMtMTRkIMK3IGJhdGNoZWQgY2xlYW51cCDCtyBvbmUgd29ya2VyIHBlciBkYXRhYmFzZSDCtyBiYWNrcyBvZmYgZHVyaW5nIG1haW50ZW5hbmNlPC90ZXh0Pgo8L3N2Zz4=" alt="Dead-letter and retention. A single atomic operation both claims live messages and redrives poison ones: from the locked head-of-queue set, messages at or past maxReceiveCount are moved from the source into the dead-letter queue and the rest are claimed and returned, in one transaction, so the move and claims commit together. This does not prevent consumer redelivery after visibility expiry. Separately, a background retention reaper removes messages whose send time is older than the queue's retention, clamped between 60 seconds and 14 days." />
</div>

<p className="t9-caption">One transaction moves failed messages to the DLQ and claims eligible messages. A background worker removes messages older than their retention period, clamped to 60 seconds-14 days.</p>

#### FIFO queues

For message-group ordering and five-minute send deduplication, see [SQS FIFO](/service-adapters/aws/messaging-streaming/sqs-fifo).

#### Limitations

△ Where SQS and this backend diverge, read before you adopt

* **Throughput is bounded by one PostgreSQL server.** All of an appliance's queues share one PostgreSQL server, so peak throughput is bounded by that one server, and a heavy queue can affect its neighbors. On the Tensor9 round-trip eval the Postgres adapter holds throughput parity with native SQS (about 300 vs 286 ops/s) and a tighter end-to-end tail (p99 140 ms vs SQS's 172 ms), while SQS is faster at the median (p50 15 ms vs 24 ms), results from that moderate-rate Standard-queue workload, not a measured throughput ceiling. This benchmark does not measure FIFO throughput or every hosting option.
* **CloudNativePG data lives in-cluster and does not survive a cluster rebuild.** The in-cluster CloudNativePG host keeps queue data inside the appliance cluster, so a full cluster rebuild loses it; the two managed hosts (Cloud SQL Postgres, Azure Flexible Server) keep queue data on a provider-operated server outside the cluster, so it survives a rebuild. All three hosts use the same queue implementation; database placement changes rebuild recovery.
* **Stale receipt handles return an error.** `DeleteMessage` and `ChangeMessageVisibility` return `ReceiptHandleIsInvalid` when no row matches the token.
* **Retention cleanup runs periodically.** An expired message can remain until the next cleanup pass. Retention is clamped to 60 seconds–14 days, with invalidly short values raised to 60 seconds to avoid deleting newly sent messages.
* **Approximate counts are a point-in-time exact count.** `ApproximateNumberOfMessages` and `...NotVisible` are a real count of the visible and not-yet-visible messages in the queue's table, exact at query time, but still Approximate under concurrent traffic; the delayed-count is reported as zero.
* **Control-plane calls operate on the apply-time schema.** The database, the catalog, and each per-queue table (and its dead-letter table) are created by the compiler's provisioner; runtime `CreateQueue` / `DeleteQueue` / `SetQueueAttributes` operate on that provisioned schema, and a switch between standard and FIFO is refused as a replace rather than silently mutating semantics.

#### Other considerations

* **Plan message cutover.** The database, catalog and queue tables start empty. Existing SQS messages are not migrated. Drain the source or coordinate dual writes during the transition.
* **Provisioning and ownership.** The adapter provisions and owns its own schema atomically per queue (one database per appliance, a catalog, and one durable table per declared queue, plus its dead-letter table), so a crash never leaves a half-provisioned queue. Each queue is marked with an ownership stamp: the layer never touches a queue it doesn't own (an unstamped or foreign-owned queue detaches rather than deletes), and it refuses to drop a non-empty queue without force.
* **Three hosts, one backend, keyless on the managed ones.** The same backend supports CloudNativePG, Cloud SQL Postgres and Azure Flexible Server. On the two managed hosts the connection is keyless (an Entra or Cloud SQL IAM token obtained in-process and presented as the database password, no static secret), and the provider operates the database's durability, backup, and HA while Tensor9 operates the adapter.

## On Azure, OCI, and Private Kubernetes

### Via CloudNativePG

| Operation               | Area           | Support   | Depth      | Notes                                                                                  |
| ----------------------- | -------------- | --------- | ---------- | -------------------------------------------------------------------------------------- |
| Dead-letter redrive     | Dead-letter    | Supported | Most usage | fires automatically once a message passes maxReceiveCount                              |
| Message attributes      | Messages       | Supported | Common     | -                                                                                      |
| GetQueueAttributes      | Queues         | Supported | Most usage | reads queue attributes, including approximate message counts                           |
| GetQueueUrl             | Queues         | Supported | Most usage | resolves the queue by name                                                             |
| DelaySeconds            | Send / receive | Supported | Common     | a delayed message remains hidden until its delay expires                               |
| DeleteMessage           | Send / receive | Supported | Common     | resolves by receipt handle; a stale handle returns ReceiptHandleIsInvalid              |
| DeleteMessageBatch      | Send / receive | Supported | Common     | returns the result for each entry                                                      |
| ReceiveMessage          | Send / receive | Supported | Common     | long-poll (WaitTimeSeconds) honored; claims the oldest visible messages                |
| SendMessage             | Send / receive | Supported | Common     | supports both SQS protocol formats; MD5 checksums match what your SDK verifies         |
| SendMessageBatch        | Send / receive | Supported | Common     | up to 10 messages per call; returns the result for each entry                          |
| ChangeMessageVisibility | Visibility     | Supported | Common     | resolves by receipt handle; a stale handle is rejected rather than silently succeeding |

#### PostgreSQL hosting

Tensor9 operates CloudNativePG inside the customer's Kubernetes cluster. Queue data is stored on that cluster's volumes and does not survive a full cluster rebuild. Plan recovery and message cutover before replacing the cluster. Tensor9 operates the queue schema and adapter. Queues start empty; existing SQS messages are not migrated. Drain the source or coordinate dual writes before cutover.

#### Queue behavior

The adapter uses the same PostgreSQL tables, atomic message claims, stored receipt handles and transactional dead-letter moves described in [PostgreSQL queue behavior](/service-adapters/aws/messaging-streaming/sqs-standard#postgresql-queue-behavior). Receipt handles survive adapter restarts; stale claims return an error. Retention still removes messages in flight. All queues share database capacity, so a busy queue can affect others. The documented Standard-queue benchmark does not establish this host's capacity or FIFO throughput. Delivery is at least once with best-effort ordering. For group ordering and deduplication, see [SQS FIFO](/service-adapters/aws/messaging-streaming/sqs-fifo).

## On Azure

### Via Azure Queue Storage

| Operation                             | Area           | Support   | Depth        | Notes                                                                                                                              |
| ------------------------------------- | -------------- | --------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| Dead-letter redrive                   | Dead-letter    | Partial   | Most usage   | the application must move failed messages to a separate queue using dequeue\_count                                                 |
| CreateQueue                           | Queues         | Supported | Most usage   | queue operation                                                                                                                    |
| DeleteQueue                           | Queues         | Supported | Most usage   | queue operation                                                                                                                    |
| ListQueues                            | Queues         | Supported | Most usage   | queue operation                                                                                                                    |
| PurgeQueue                            | Queues         | Supported | Most usage   | queue operation                                                                                                                    |
| SetQueueAttributes                    | Queues         | Partial   | Full surface | Max stores visibility and retention defaults and applies them to messages; nonzero queue delay and dead-letter routes are rejected |
| TagQueue / UntagQueue / ListQueueTags | Queues         | Supported | Full surface | logical queue tags in the Max catalog                                                                                              |
| Batch operations                      | Send / receive | Partial   | Most usage   | no native batching; a batch runs as N round-trips                                                                                  |
| DelaySeconds                          | Send / receive | Supported | Common       | maps to send-visibility                                                                                                            |
| DeleteMessage                         | Send / receive | Supported | Common       | a stale pop\_receipt no-ops just as SQS does                                                                                       |
| ReceiveMessage                        | Send / receive | Supported | Common       | queue operation authenticated through workload identity                                                                            |
| SendMessage                           | Send / receive | Supported | Common       | queue operation authenticated through workload identity                                                                            |
| ChangeMessageVisibility               | Visibility     | Supported | Common       | resolves by pop\_receipt, stateless and durable across an adapter restart                                                          |

#### How it works

Tensor9 adds an adapter, a proxy process, to your application pod and sets `AWS_ENDPOINT_URL_SQS` to its loopback address. Your application keeps its `SendMessage` and `ReceiveMessage` calls. The adapter translates them to Queue Storage operations and returns SQS responses, error codes and MD5 checksums.

Each declared standard SQS queue becomes a Queue Storage queue in one storage account. Receipt handles and receive counts map to Queue Storage's `pop_receipt` and `dequeue_count`. Each message body is base64-encoded, with attributes included in a JSON envelope when present. The encoded size limit leaves roughly 48 KiB for the payload, and applications must manage dead-letter delivery themselves. FIFO queues are routed to Service Bus.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24ncyBTUVMgU0RLIGNhbGxzIEFtYXpvbiBTUVMuIEFmdGVyOiBpbiB0aGUgdGFyZ2V0IGNsb3VkIHRoZSBzYW1lIGFwcGxpY2F0aW9uIGFuZCBTREsgY2FsbCBhIFRlbnNvcjkgYWRhcHRlciwgd2hpY2ggc2VydmVzIHRoZSBTUVMgQVBJIGZyb20gQXp1cmUgUXVldWUgU3RvcmFnZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9ImFoMSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQ2IiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjExOCIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI4MCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjkwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iOTAiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPlNRUyBTREs8L3RleHQ+CjxsaW5lIHgxPSIxNTAiIHkxPSIxMTMiIHgyPSIyMTAiIHkyPSIxMTMiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2FoMSkiLz4KPHRleHQgeD0iMTgxIiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OC41cHgiPlNRUyBBUEk8L3RleHQ+CjxyZWN0IHg9IjIxNCIgeT0iODAiIHdpZHRoPSIxNDgiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyODgiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5BbWF6b24gU1FTPC90ZXh0Pgo8dGV4dCB4PSIyODgiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPkFXUy1tYW5hZ2VkPC90ZXh0Pgo8bGluZSB4MT0iNDE4IiB5MT0iNDAiIHgyPSI0MTgiIHkyPSIxNjAiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHJlY3QgeD0iNDYyIiB5PSI0NiIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMTgiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPk9OIFRIRSBUQVJHRVQgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjQ3NCIgeT0iODAiIHdpZHRoPSI5MiIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUyMCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI1MjAiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5Ij5zYW1lIFNESzwvdGV4dD4KPGxpbmUgeDE9IjU2NiIgeTE9IjExMyIgeDI9IjU5MCIgeTI9IjExMyIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjYWgxKSIvPgo8cmVjdCB4PSI1OTQiIHk9Ijc2IiB3aWR0aD0iMTEwIiBoZWlnaHQ9Ijc0IiByeD0iMTEiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iNjQ5IiB5PSIxMDIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+VGVuc29yOTwvdGV4dD4KPHRleHQgeD0iNjQ5IiB5PSIxMTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPnNlcnZpY2U8L3RleHQ+Cjx0ZXh0IHg9IjY0OSIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5hZGFwdGVyPC90ZXh0Pgo8bGluZSB4MT0iNzA0IiB5MT0iMTEzIiB4Mj0iNzI4IiB5Mj0iMTEzIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhaDEpIi8+CjxyZWN0IHg9IjczMiIgeT0iODAiIHdpZHRoPSI4NCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijc3NCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwcHgiPlF1ZXVlIFN0b3JhZ2U8L3RleHQ+Cjx0ZXh0IHg9Ijc3NCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+Y2xhc3NpYzwvdGV4dD4KPC9zdmc+" alt="Before: on AWS the application's SQS SDK calls Amazon SQS. After: in the target cloud the same application and SDK call a Tensor9 adapter, which serves the SQS API from Azure Queue Storage." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24ncyBTUVMgU0RLIGNhbGxzIEFtYXpvbiBTUVMuIEFmdGVyOiBpbiB0aGUgdGFyZ2V0IGNsb3VkIHRoZSBzYW1lIGFwcGxpY2F0aW9uIGFuZCBTREsgY2FsbCBhIFRlbnNvcjkgYWRhcHRlciwgd2hpY2ggc2VydmVzIHRoZSBTUVMgQVBJIGZyb20gQXp1cmUgUXVldWUgU3RvcmFnZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9ImFoMSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQ2IiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjExOCIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iODAiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI5MCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEyLjVweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjkwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5TUVMgU0RLPC90ZXh0Pgo8bGluZSB4MT0iMTUwIiB5MT0iMTEzIiB4Mj0iMjEwIiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhaDEpIi8+Cjx0ZXh0IHg9IjE4MSIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZm9udC1zaXplOjguNXB4Ij5TUVMgQVBJPC90ZXh0Pgo8cmVjdCB4PSIyMTQiIHk9IjgwIiB3aWR0aD0iMTQ4IiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjg4IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+QW1hem9uIFNRUzwvdGV4dD4KPHRleHQgeD0iMjg4IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5BV1MtbWFuYWdlZDwvdGV4dD4KPGxpbmUgeDE9IjQxOCIgeTE9IjQwIiB4Mj0iNDE4IiB5Mj0iMTYwIiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxyZWN0IHg9IjQ2MiIgeT0iNDYiIHdpZHRoPSIzNjIiIGhlaWdodD0iMTE4IiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSI0NzYiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwZGVjOCI+T04gVEhFIFRBUkdFVCBDTE9VRDwvdGV4dD4KPHJlY3QgeD0iNDc0IiB5PSI4MCIgd2lkdGg9IjkyIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNTIwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjUyMCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnNhbWUgU0RLPC90ZXh0Pgo8bGluZSB4MT0iNTY2IiB5MT0iMTEzIiB4Mj0iNTkwIiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhaDEpIi8+CjxyZWN0IHg9IjU5NCIgeT0iNzYiIHdpZHRoPSIxMTAiIGhlaWdodD0iNzQiIHJ4PSIxMSIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI2NDkiIHk9IjEwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5UZW5zb3I5PC90ZXh0Pgo8dGV4dCB4PSI2NDkiIHk9IjExNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+c2VydmljZTwvdGV4dD4KPHRleHQgeD0iNjQ5IiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmFkYXB0ZXI8L3RleHQ+CjxsaW5lIHgxPSI3MDQiIHkxPSIxMTMiIHgyPSI3MjgiIHkyPSIxMTMiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2FoMSkiLz4KPHJlY3QgeD0iNzMyIiB5PSI4MCIgd2lkdGg9Ijg0IiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzc0IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTBweCI+UXVldWUgU3RvcmFnZTwvdGV4dD4KPHRleHQgeD0iNzc0IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5jbGFzc2ljPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS the application's SQS SDK calls Amazon SQS. After: in the target cloud the same application and SDK call a Tensor9 adapter, which serves the SQS API from Azure Queue Storage." />
</div>

<p className="t9-caption">The application keeps its SQS SDK. The adapter translates its calls to Azure Queue Storage.</p>

#### Architecture

The Rust adapter uses Queue Storage's `pop_receipt` to delete messages and change visibility across calls. A handle remains usable after an adapter restart, and instances can scale out without a receiver pool, lock-renewal loop or cleanup worker. The customer's AKS Workload Identity supplies a federated token through the cluster webhook, without a static account key. Microsoft operates Queue Storage's durability, backups and high availability; Tensor9 operates the adapter.

Terraform creates one storage account and one queue per declared SQS queue, preserving queue names. `message_text` contains the base64-encoded body and, when supplied, a JSON envelope with `MessageAttributes`. Queue Storage's `pop_receipt`, `dequeue_count` and `time_next_visible` provide the receipt token, receive count and visibility deadline.

* **Queue Storage retains message state.** Receipt tokens remain valid across adapter restarts. Runtime operations need no receiver pool, lock-renewal loop or separate retention worker.
* **One storage account, one queue per declared SQS queue, reached keylessly.** The path runs on the customer's AKS Workload Identity with no static key; Microsoft operates durability, backup, and HA, and Tensor9 operates the adapter.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcmNoaXRlY3R1cmU6IHRoZSBhcHAncyBTUVMgU0RLIGNhbGxzIGEgVGVuc29yOSBhZGFwdGVyLCB3aGljaCBzZXJ2ZXMgdGhlIFNRUyBBUEkgZnJvbSBBenVyZSBRdWV1ZSBTdG9yYWdlIG92ZXIgYSBrZXlsZXNzIFdvcmtsb2FkIElkZW50aXR5IHBhdGguIE9uZSBzdG9yYWdlIGFjY291bnQgaG9sZHMgb25lIHF1ZXVlIHBlciBkZWNsYXJlZCBTUVMgcXVldWU7IGVhY2ggU1FTIG1lc3NhZ2UgaXMgb25lIHF1ZXVlIG1lc3NhZ2Ugd2hvc2UgbWVzc2FnZV90ZXh0IGlzIHRoZSBiYXNlNjQtd3JhcHBlZCBib2R5LCBhbG9uZ3NpZGUgdGhlIG5hdGl2ZSBwb3BfcmVjZWlwdCwgZGVxdWV1ZV9jb3VudCBhbmQgdGltZV9uZXh0X3Zpc2libGUgdmlzaWJpbGl0eSBkZWFkbGluZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InFhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8cmVjdCB4PSI4IiB5PSIzNCIgd2lkdGg9IjgyMCIgaGVpZ2h0PSIxODIiIHJ4PSIxNiIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjI2IiB5PSI1NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjgiPkNVU1RPTUVSJ1MgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxMDgiIHdpZHRoPSI5NiIgaGVpZ2h0PSI3NiIgcng9IjEyIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjcyIiB5PSIxNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjcyIiB5PSIxNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5TUVMgU0RLPC90ZXh0Pgo8dGV4dCB4PSI3MiIgeT0iMTc0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNTk2NjkiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjEyMCIgeTE9IjE0NiIgeDI9IjE1MiIgeTI9IjE0NiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcWEpIi8+CjxyZWN0IHg9IjE1NCIgeT0iMTE2IiB3aWR0aD0iMTM2IiBoZWlnaHQ9IjYwIiByeD0iMTIiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMjIyIiB5PSIxNDIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTIuNXB4Ij5UZW5zb3I5IGxheWVyPC90ZXh0Pgo8dGV4dCB4PSIyMjIiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+UXVldWUgU3RvcmFnZSBBUEk8L3RleHQ+CjxsaW5lIHgxPSIyOTIiIHkxPSIxNDYiIHgyPSIzNjAiIHkyPSIxNDYiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3FhKSIvPgo8dGV4dCB4PSIzMjYiIHk9IjEzOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGIiPlF1ZXVlIFJFU1Q8L3RleHQ+Cjx0ZXh0IHg9IjMyNiIgeT0iMTU4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZmlsbDojMDQ3ODU3Ij5rZXlsZXNzPC90ZXh0Pgo8cmVjdCB4PSIzNjQiIHk9IjcwIiB3aWR0aD0iNDU2IiBoZWlnaHQ9IjE0MCIgcng9IjEzIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjU5MiIgeT0iOTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5BenVyZSBRdWV1ZSBTdG9yYWdlPC90ZXh0Pgo8dGV4dCB4PSI1OTIiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6MTBweCAnU0YgTW9ubycsTWVubG8sbW9ub3NwYWNlO2ZpbGw6IzY0NzQ4YiI+b25lIHN0b3JhZ2UgYWNjb3VudCDCtyBvbmUgcXVldWUgcGVyIFNRUyBxdWV1ZTwvdGV4dD4KPHJlY3QgeD0iMzgwIiB5PSIxMjAiIHdpZHRoPSI0MjQiIGhlaWdodD0iODAiIHJ4PSIxMCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSI1OTIiIHk9IjE0MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwO2ZpbGw6IzQ3NTU2OSI+cXVldWU6IG9yZGVycyAoY2xhc3NpYyk8L3RleHQ+Cjx0ZXh0IHg9IjU5MiIgeT0iMTY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+U1FTIGJvZHkg4oaSIG1lc3NhZ2VfdGV4dCAoYmFzZTY0KTwvdGV4dD4KPHRleHQgeD0iNTkyIiB5PSIxODYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OjEwcHggJ1NGIE1vbm8nLE1lbmxvLG1vbm9zcGFjZTtmaWxsOiM0NzU1NjkiPnBvcF9yZWNlaXB0IMK3IGRlcXVldWVfY291bnQgwrcgdGltZV9uZXh0X3Zpc2libGU8L3RleHQ+Cjwvc3ZnPg==" alt="Architecture: the app's SQS SDK calls a Tensor9 adapter, which serves the SQS API from Azure Queue Storage over a keyless Workload Identity path. One storage account holds one queue per declared SQS queue; each SQS message is one queue message whose message_text is the base64-wrapped body, alongside the native pop_receipt, dequeue_count and time_next_visible visibility deadline." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcmNoaXRlY3R1cmU6IHRoZSBhcHAncyBTUVMgU0RLIGNhbGxzIGEgVGVuc29yOSBhZGFwdGVyLCB3aGljaCBzZXJ2ZXMgdGhlIFNRUyBBUEkgZnJvbSBBenVyZSBRdWV1ZSBTdG9yYWdlIG92ZXIgYSBrZXlsZXNzIFdvcmtsb2FkIElkZW50aXR5IHBhdGguIE9uZSBzdG9yYWdlIGFjY291bnQgaG9sZHMgb25lIHF1ZXVlIHBlciBkZWNsYXJlZCBTUVMgcXVldWU7IGVhY2ggU1FTIG1lc3NhZ2UgaXMgb25lIHF1ZXVlIG1lc3NhZ2Ugd2hvc2UgbWVzc2FnZV90ZXh0IGlzIHRoZSBiYXNlNjQtd3JhcHBlZCBib2R5LCBhbG9uZ3NpZGUgdGhlIG5hdGl2ZSBwb3BfcmVjZWlwdCwgZGVxdWV1ZV9jb3VudCBhbmQgdGltZV9uZXh0X3Zpc2libGUgdmlzaWJpbGl0eSBkZWFkbGluZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InFhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8cmVjdCB4PSI4IiB5PSIzNCIgd2lkdGg9IjgyMCIgaGVpZ2h0PSIxODIiIHJ4PSIxNiIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjI2IiB5PSI1NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjgiPkNVU1RPTUVSJ1MgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxMDgiIHdpZHRoPSI5NiIgaGVpZ2h0PSI3NiIgcng9IjEyIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjcyIiB5PSIxNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjcyIiB5PSIxNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5TUVMgU0RLPC90ZXh0Pgo8dGV4dCB4PSI3MiIgeT0iMTc0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjEyMCIgeTE9IjE0NiIgeDI9IjE1MiIgeTI9IjE0NiIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcWEpIi8+CjxyZWN0IHg9IjE1NCIgeT0iMTE2IiB3aWR0aD0iMTM2IiBoZWlnaHQ9IjYwIiByeD0iMTIiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMjIyIiB5PSIxNDIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTIuNXB4Ij5UZW5zb3I5IGxheWVyPC90ZXh0Pgo8dGV4dCB4PSIyMjIiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+UXVldWUgU3RvcmFnZSBBUEk8L3RleHQ+CjxsaW5lIHgxPSIyOTIiIHkxPSIxNDYiIHgyPSIzNjAiIHkyPSIxNDYiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3FhKSIvPgo8dGV4dCB4PSIzMjYiIHk9IjEzOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDgiPlF1ZXVlIFJFU1Q8L3RleHQ+Cjx0ZXh0IHg9IjMyNiIgeT0iMTU4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzkwZGVjOCI+a2V5bGVzczwvdGV4dD4KPHJlY3QgeD0iMzY0IiB5PSI3MCIgd2lkdGg9IjQ1NiIgaGVpZ2h0PSIxNDAiIHJ4PSIxMyIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNiIvPgo8dGV4dCB4PSI1OTIiIHk9Ijk0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEyLjVweCI+QXp1cmUgUXVldWUgU3RvcmFnZTwvdGV4dD4KPHRleHQgeD0iNTkyIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OjEwcHggJ1NGIE1vbm8nLE1lbmxvLG1vbm9zcGFjZTtmaWxsOiAjYzljZmQ4Ij5vbmUgc3RvcmFnZSBhY2NvdW50IMK3IG9uZSBxdWV1ZSBwZXIgU1FTIHF1ZXVlPC90ZXh0Pgo8cmVjdCB4PSIzODAiIHk9IjEyMCIgd2lkdGg9IjQyNCIgaGVpZ2h0PSI4MCIgcng9IjEwIiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjU5MiIgeT0iMTQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDA7ZmlsbDogI2M5Y2ZkOCI+cXVldWU6IG9yZGVycyAoY2xhc3NpYyk8L3RleHQ+Cjx0ZXh0IHg9IjU5MiIgeT0iMTY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+U1FTIGJvZHkg4oaSIG1lc3NhZ2VfdGV4dCAoYmFzZTY0KTwvdGV4dD4KPHRleHQgeD0iNTkyIiB5PSIxODYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OjEwcHggJ1NGIE1vbm8nLE1lbmxvLG1vbm9zcGFjZTtmaWxsOiAjYzljZmQ4Ij5wb3BfcmVjZWlwdCDCtyBkZXF1ZXVlX2NvdW50IMK3IHRpbWVfbmV4dF92aXNpYmxlPC90ZXh0Pgo8L3N2Zz4=" alt="Architecture: the app's SQS SDK calls a Tensor9 adapter, which serves the SQS API from Azure Queue Storage over a keyless Workload Identity path. One storage account holds one queue per declared SQS queue; each SQS message is one queue message whose message_text is the base64-wrapped body, alongside the native pop_receipt, dequeue_count and time_next_visible visibility deadline." />
</div>

<p className="t9-caption">Queue Storage stores messages, receipt tokens, receive counts and visibility deadlines. The adapter translates these fields to SQS without retaining durable state.</p>

#### Receiving messages

A `ReceiveMessage` is a **bounded long-poll**. Queue Storage has no native long-poll, so the adapter turns `WaitTimeSeconds` (capped at 20, the SQS maximum) into a poll loop that runs once immediately and then sleeps **about 300 ms between empty polls** until the budget elapses; a fixed poll interval, not a latency figure. Each poll pulls up to 10 messages : SQS caps a receive at 10, and although Queue Storage itself would return up to 32 the layer honors the SQS contract. The per-receive **visibility timeout passes straight through** (Queue Storage imposes no visibility-versus-TTL coupling on receive), and SQS's 12-hour maximum sits comfortably under Queue Storage's own 7-day ceiling, so nothing is clamped.

Each received message includes `message_id`, `message_text`, `pop_receipt`, `dequeue_count` and `time_next_visible`. The adapter builds the SQS receipt handle from the receipt token and sets `ApproximateReceiveCount` from the dequeue count, which starts at 1 and increases on redelivery. It decodes the body and attributes and recomputes their MD5 checksums. Delivery is at-least-once with best-effort ordering. `DelaySeconds` sets initial invisibility. Use Azure monitoring for measured receive latency and throughput.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpdmUgaXMgYSBib3VuZGVkIGxvbmctcG9sbDogV2FpdFRpbWVTZWNvbmRzIGlzIGNhcHBlZCBhdCAyMCBhbmQsIGJlY2F1c2UgUXVldWUgU3RvcmFnZSBoYXMgbm8gbmF0aXZlIGxvbmctcG9sbCwgYmVjb21lcyBhIHBvbGwgbG9vcCB0aGF0IHJ1bnMgb25jZSB0aGVuIHNsZWVwcyAzMDAgbWlsbGlzZWNvbmRzIGJldHdlZW4gZW1wdHkgcG9sbHMuIEVhY2ggcG9sbCBwdWxscyB1cCB0byB0ZW4gbWVzc2FnZXM7IFF1ZXVlIFN0b3JhZ2UgcmV0dXJucyBlYWNoIGFzIG1lc3NhZ2VfaWQsIG1lc3NhZ2VfdGV4dCwgcG9wX3JlY2VpcHQsIGRlcXVldWVfY291bnQgYW5kIHRpbWVfbmV4dF92aXNpYmxlLCB3aGljaCBtYXAgZGlyZWN0bHkgdG8gdGhlIFNRUyByZWNlaXB0IGhhbmRsZSBhbmQgQXBwcm94aW1hdGVSZWNlaXZlQ291bnQsIHdpdGggZGVsaXZlcnkgYXQtbGVhc3Qtb25jZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPG1hcmtlciBpZD0icmciIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzA1OTY2OSIvPjwvbWFya2VyPgo8L2RlZnM+CjxjaXJjbGUgY3g9IjQwIiBjeT0iNjAiIHI9IjEzIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PHRleHQgeD0iNDAiIHk9IjY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPjE8L3RleHQ+CjxyZWN0IHg9IjYyIiB5PSI0MiIgd2lkdGg9IjI5MCIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSI2MiIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMi41cHgiPkxvbmctcG9sbCwgV2FpdFRpbWVTZWNvbmRzIOKJpCAyMCBzPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iNzkiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5ubyBuYXRpdmUgbG9uZy1wb2xsIOKGkiAzMDAgbXMgcG9sbCBsb29wLCBib3VuZGVkPC90ZXh0Pgo8bGluZSB4MT0iMTgwIiB5MT0iOTAiIHgyPSIxODAiIHkyPSIxMTIiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcmEpIi8+CjxjaXJjbGUgY3g9IjQwIiBjeT0iMTM0IiByPSIxMyIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSIxMzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+MjwvdGV4dD4KPHJlY3QgeD0iNjIiIHk9IjExNiIgd2lkdGg9IjI5MCIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSIxMzYiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5yZWNlaXZlX21lc3NhZ2VzLCB1cCB0byAxMDwvdGV4dD4KPHRleHQgeD0iNzYiIHk9IjE1MyIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPlNRUyBjYXBzIDEwOyBRdWV1ZSBTdG9yYWdlIGFsbG93cyAzMiwgU1FTIGhvbm9yZWQ8L3RleHQ+CjxsaW5lIHgxPSIxODAiIHkxPSIxNjQiIHgyPSIxODAiIHkyPSIxODYiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcmEpIi8+CjxjaXJjbGUgY3g9IjQwIiBjeT0iMjA4IiByPSIxMyIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSIyMTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+MzwvdGV4dD4KPHJlY3QgeD0iNjIiIHk9IjE5MCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSIyMTAiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTIuNXB4Ij5oaWRlIHVudGlsIHRpbWVfbmV4dF92aXNpYmxlPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iMjI3IiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5kZXF1ZXVlX2NvdW50KysgwrcgcG9wX3JlY2VpcHQgaGFuZGVkIGJhY2s8L3RleHQ+CjxsaW5lIHgxPSIzNTIiIHkxPSIyMTQiIHgyPSIzOTAiIHkyPSIxMzgiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcmcpIi8+CjxyZWN0IHg9IjM5NCIgeT0iNzgiIHdpZHRoPSI0MTgiIGhlaWdodD0iNzIiIHJ4PSIxMSIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI2MDMiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMnB4Ij50aGUgcmVjZWl2ZWQgbWVzc2FnZTwvdGV4dD4KPHRleHQgeD0iNjAzIiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiMwNDc4NTciPnBvcF9yZWNlaXB0IOKGkiBTUVMgcmVjZWlwdCBoYW5kbGU8L3RleHQ+Cjx0ZXh0IHg9IjYwMyIgeT0iMTQ0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZmlsbDojMDQ3ODU3Ij5kZXF1ZXVlX2NvdW50IOKGkiBBcHByb3hpbWF0ZVJlY2VpdmVDb3VudDwvdGV4dD4KPHJlY3QgeD0iMzk0IiB5PSIxNzIiIHdpZHRoPSI0MTgiIGhlaWdodD0iNDQiIHJ4PSIxMSIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI2MDMiIHk9IjE5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmF0LWxlYXN0LW9uY2UsIGJlc3QtZWZmb3J0IG9yZGVyLCB0aGUgU1FTIHN0YW5kYXJkLXF1ZXVlIGNvbnRyYWN0PC90ZXh0Pgo8L3N2Zz4=" alt="A receive is a bounded long-poll: WaitTimeSeconds is capped at 20 and, because Queue Storage has no native long-poll, becomes a poll loop that runs once then sleeps 300 milliseconds between empty polls. Each poll pulls up to ten messages; Queue Storage returns each as message_id, message_text, pop_receipt, dequeue_count and time_next_visible, which map directly to the SQS receipt handle and ApproximateReceiveCount, with delivery at-least-once." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpdmUgaXMgYSBib3VuZGVkIGxvbmctcG9sbDogV2FpdFRpbWVTZWNvbmRzIGlzIGNhcHBlZCBhdCAyMCBhbmQsIGJlY2F1c2UgUXVldWUgU3RvcmFnZSBoYXMgbm8gbmF0aXZlIGxvbmctcG9sbCwgYmVjb21lcyBhIHBvbGwgbG9vcCB0aGF0IHJ1bnMgb25jZSB0aGVuIHNsZWVwcyAzMDAgbWlsbGlzZWNvbmRzIGJldHdlZW4gZW1wdHkgcG9sbHMuIEVhY2ggcG9sbCBwdWxscyB1cCB0byB0ZW4gbWVzc2FnZXM7IFF1ZXVlIFN0b3JhZ2UgcmV0dXJucyBlYWNoIGFzIG1lc3NhZ2VfaWQsIG1lc3NhZ2VfdGV4dCwgcG9wX3JlY2VpcHQsIGRlcXVldWVfY291bnQgYW5kIHRpbWVfbmV4dF92aXNpYmxlLCB3aGljaCBtYXAgZGlyZWN0bHkgdG8gdGhlIFNRUyByZWNlaXB0IGhhbmRsZSBhbmQgQXBwcm94aW1hdGVSZWNlaXZlQ291bnQsIHdpdGggZGVsaXZlcnkgYXQtbGVhc3Qtb25jZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPG1hcmtlciBpZD0icmciIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzIwZjdiNCIvPjwvbWFya2VyPgo8L2RlZnM+CjxjaXJjbGUgY3g9IjQwIiBjeT0iNjAiIHI9IjEzIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PHRleHQgeD0iNDAiIHk9IjY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPjE8L3RleHQ+CjxyZWN0IHg9IjYyIiB5PSI0MiIgd2lkdGg9IjI5MCIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSI2MiIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMi41cHgiPkxvbmctcG9sbCwgV2FpdFRpbWVTZWNvbmRzIOKJpCAyMCBzPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iNzkiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5ubyBuYXRpdmUgbG9uZy1wb2xsIOKGkiAzMDAgbXMgcG9sbCBsb29wLCBib3VuZGVkPC90ZXh0Pgo8bGluZSB4MT0iMTgwIiB5MT0iOTAiIHgyPSIxODAiIHkyPSIxMTIiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcmEpIi8+CjxjaXJjbGUgY3g9IjQwIiBjeT0iMTM0IiByPSIxMyIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSIxMzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+MjwvdGV4dD4KPHJlY3QgeD0iNjIiIHk9IjExNiIgd2lkdGg9IjI5MCIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSIxMzYiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5yZWNlaXZlX21lc3NhZ2VzLCB1cCB0byAxMDwvdGV4dD4KPHRleHQgeD0iNzYiIHk9IjE1MyIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPlNRUyBjYXBzIDEwOyBRdWV1ZSBTdG9yYWdlIGFsbG93cyAzMiwgU1FTIGhvbm9yZWQ8L3RleHQ+CjxsaW5lIHgxPSIxODAiIHkxPSIxNjQiIHgyPSIxODAiIHkyPSIxODYiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcmEpIi8+CjxjaXJjbGUgY3g9IjQwIiBjeT0iMjA4IiByPSIxMyIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSIyMTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+MzwvdGV4dD4KPHJlY3QgeD0iNjIiIHk9IjE5MCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSIyMTAiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTIuNXB4Ij5oaWRlIHVudGlsIHRpbWVfbmV4dF92aXNpYmxlPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iMjI3IiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5kZXF1ZXVlX2NvdW50KysgwrcgcG9wX3JlY2VpcHQgaGFuZGVkIGJhY2s8L3RleHQ+CjxsaW5lIHgxPSIzNTIiIHkxPSIyMTQiIHgyPSIzOTAiIHkyPSIxMzgiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcmcpIi8+CjxyZWN0IHg9IjM5NCIgeT0iNzgiIHdpZHRoPSI0MTgiIGhlaWdodD0iNzIiIHJ4PSIxMSIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI2MDMiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij50aGUgcmVjZWl2ZWQgbWVzc2FnZTwvdGV4dD4KPHRleHQgeD0iNjAzIiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBkZWM4Ij5wb3BfcmVjZWlwdCDihpIgU1FTIHJlY2VpcHQgaGFuZGxlPC90ZXh0Pgo8dGV4dCB4PSI2MDMiIHk9IjE0NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICM5MGRlYzgiPmRlcXVldWVfY291bnQg4oaSIEFwcHJveGltYXRlUmVjZWl2ZUNvdW50PC90ZXh0Pgo8cmVjdCB4PSIzOTQiIHk9IjE3MiIgd2lkdGg9IjQxOCIgaGVpZ2h0PSI0NCIgcng9IjExIiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjYwMyIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+YXQtbGVhc3Qtb25jZSwgYmVzdC1lZmZvcnQgb3JkZXIsIHRoZSBTUVMgc3RhbmRhcmQtcXVldWUgY29udHJhY3Q8L3RleHQ+Cjwvc3ZnPg==" alt="A receive is a bounded long-poll: WaitTimeSeconds is capped at 20 and, because Queue Storage has no native long-poll, becomes a poll loop that runs once then sleeps 300 milliseconds between empty polls. Each poll pulls up to ten messages; Queue Storage returns each as message_id, message_text, pop_receipt, dequeue_count and time_next_visible, which map directly to the SQS receipt handle and ApproximateReceiveCount, with delivery at-least-once." />
</div>

<p className="t9-caption">A receive is a bounded long-poll that returns Queue Storage's own pop\_receipt and dequeue\_count ; there is no lock to renew. ApproximateReceiveCount is the real dequeue\_count , counted from 1.</p>

#### Receipt handles & visibility

The receipt handle contains `queue | message_id | pop_receipt`, base64url-encoded with a `qs1:` prefix. Queue Storage accepts the receipt across connections and processes, so delete and visibility changes still work after an adapter restart. A stale receipt, from a deleted or re-received message, produces a successful no-op on delete or update. A malformed handle or one for another queue returns `ReceiptHandleIsInvalid`.

Native Queue Storage sets visibility on individual messages and has no queue-level default. Max stores the logical SQS queue's visibility default and applies it when `ReceiveMessage` omits an override. `ChangeMessageVisibility` maps to `update_message`, which re-stamps `time_next_visible`; a zero-second change surfaces the message for **immediate re-claim**, and SQS's 12-hour maximum sits under Queue Storage's 7-day ceiling , so the full SQS range passes through with **no clamp**. Because settle is by `pop_receipt` and not a broker lock, a consumer that lost its claim to a redelivery finds its `pop_receipt` superseded; the update no-ops rather than corrupting another consumer's claim.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpcHQgaGFuZGxlIGNvbnRhaW5zIHRoZSBxdWV1ZSwgbWVzc2FnZV9pZCBhbmQgbmF0aXZlIHBvcF9yZWNlaXB0IHRva2VuLiBBenVyZSBRdWV1ZSBTdG9yYWdlIGtlZXBzIHRoZSBtZXNzYWdlIGFuZCB2aXNpYmlsaXR5IGRlYWRsaW5lLCBzbyBhIGN1cnJlbnQgcmVjZWlwdCBzdGlsbCB3b3JrcyBhZnRlciBhbiBhZGFwdGVyIHJlc3RhcnQuIFZpc2liaWxpdHkgaXMgcGVyLW1lc3NhZ2U6IFNRUydzIDEyLWhvdXIgbWF4aW11bSBmaXRzIHdpdGggaGVhZHJvb20gdW5kZXIgUXVldWUgU3RvcmFnZSdzIDctZGF5IGNlaWxpbmcsIHNvIENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5IHJlLXN0YW1wcyB0aW1lX25leHRfdmlzaWJsZSB3aXRoIG5vIGNsYW1wLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8dGV4dCB4PSIyNiIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPlNUQVRFTEVTUyBSRUNFSVBUIEhBTkRMRTwvdGV4dD4KPHJlY3QgeD0iMjYiIHk9IjM4IiB3aWR0aD0iMzYwIiBoZWlnaHQ9IjE0MiIgcng9IjE0IiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+CjxyZWN0IHg9IjQ0IiB5PSI1OCIgd2lkdGg9IjMyNCIgaGVpZ2h0PSIzNCIgcng9IjgiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMjA2IiB5PSI4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzA0Nzg1NyI+cXMxOm9yZGVyczphM2Y44oCmOkFnQUFBQeKApnBvcDwvdGV4dD4KPHRleHQgeD0iMjA2IiB5PSIxMTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5xdWV1ZSB8IG1lc3NhZ2VfaWQgfCBwb3BfcmVjZWlwdDwvdGV4dD4KPGxpbmUgeDE9IjIwNiIgeTE9IjEyMCIgeDI9IjIwNiIgeTI9IjEzNiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjEuNiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAzIi8+Cjx0ZXh0IHg9IjIwNiIgeT0iMTQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPihhZGFwdGVyIHJlc3RhcnQpPC90ZXh0Pgo8dGV4dCB4PSIyMDYiIHk9IjE2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5Ij5EZWxldGUgLyBDaGFuZ2VWaXNpYmlsaXR5IHVzZSB0aGlzIHJlY2VpcHQ8L3RleHQ+CjxsaW5lIHgxPSIzOTgiIHkxPSIzNCIgeDI9IjM5OCIgeTI9IjE4NCIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI0MjQiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojNjQ3NDhiIj5QRVItTUVTU0FHRSBWSVNJQklMSVRZPC90ZXh0Pgo8cmVjdCB4PSI0MjQiIHk9IjM4IiB3aWR0aD0iMzg2IiBoZWlnaHQ9IjE0MiIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxsaW5lIHgxPSI0NDYiIHkxPSIxMDQiIHgyPSI4MDYiIHkyPSIxMDQiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIyIi8+CjxyZWN0IHg9IjQ0NiIgeT0iODgiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTgiIHJ4PSI0IiBmaWxsPSIjYTdmM2QwIiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMSIvPgo8dGV4dCB4PSI1MjEiIHk9IjgwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZmlsbDojMDU5NjY5Ij5TUVMgbWF4IDEyaDwvdGV4dD4KPHRleHQgeD0iNjc2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmhlYWRyb29tLCBubyBjbGFtcDwvdGV4dD4KPGxpbmUgeDE9Ijc3MCIgeTE9IjcwIiB4Mj0iNzcwIiB5Mj0iMTIwIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMi41Ii8+Cjx0ZXh0IHg9Ijc3MCIgeT0iNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiNiNDUzMDkiPlFTIDdkIGNlaWxpbmc8L3RleHQ+Cjx0ZXh0IHg9IjYxNyIgeT0iMTQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHkg4oaSIHVwZGF0ZV9tZXNzYWdlIHJlLXN0YW1wcyB0aW1lX25leHRfdmlzaWJsZTwvdGV4dD4KPHRleHQgeD0iNjE3IiB5PSIxNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiM5NGEzYjgiPnZpc2liaWxpdHkgMCA9IHJlLWNsYWltIG5vdyDCtyBzdGFsZSBwb3BfcmVjZWlwdCA9IG5vLW9wLCBsaWtlIFNRUzwvdGV4dD4KPC9zdmc+" alt="A receipt handle contains the queue, message_id and native pop_receipt token. Azure Queue Storage keeps the message and visibility deadline, so a current receipt still works after an adapter restart. Visibility is per-message: SQS's 12-hour maximum fits with headroom under Queue Storage's 7-day ceiling, so ChangeMessageVisibility re-stamps time_next_visible with no clamp." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpcHQgaGFuZGxlIGNvbnRhaW5zIHRoZSBxdWV1ZSwgbWVzc2FnZV9pZCBhbmQgbmF0aXZlIHBvcF9yZWNlaXB0IHRva2VuLiBBenVyZSBRdWV1ZSBTdG9yYWdlIGtlZXBzIHRoZSBtZXNzYWdlIGFuZCB2aXNpYmlsaXR5IGRlYWRsaW5lLCBzbyBhIGN1cnJlbnQgcmVjZWlwdCBzdGlsbCB3b3JrcyBhZnRlciBhbiBhZGFwdGVyIHJlc3RhcnQuIFZpc2liaWxpdHkgaXMgcGVyLW1lc3NhZ2U6IFNRUydzIDEyLWhvdXIgbWF4aW11bSBmaXRzIHdpdGggaGVhZHJvb20gdW5kZXIgUXVldWUgU3RvcmFnZSdzIDctZGF5IGNlaWxpbmcsIHNvIENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5IHJlLXN0YW1wcyB0aW1lX25leHRfdmlzaWJsZSB3aXRoIG5vIGNsYW1wLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8dGV4dCB4PSIyNiIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5TVEFURUxFU1MgUkVDRUlQVCBIQU5ETEU8L3RleHQ+CjxyZWN0IHg9IjI2IiB5PSIzOCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIxNDIiIHJ4PSIxNCIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8cmVjdCB4PSI0NCIgeT0iNTgiIHdpZHRoPSIzMjQiIGhlaWdodD0iMzQiIHJ4PSI4IiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjIwNiIgeT0iODAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBkZWM4Ij5xczE6b3JkZXJzOmEzZjjigKY6QWdBQUFB4oCmcG9wPC90ZXh0Pgo8dGV4dCB4PSIyMDYiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnF1ZXVlIHwgbWVzc2FnZV9pZCB8IHBvcF9yZWNlaXB0PC90ZXh0Pgo8bGluZSB4MT0iMjA2IiB5MT0iMTIwIiB4Mj0iMjA2IiB5Mj0iMTM2IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMS42IiBzdHJva2UtZGFzaGFycmF5PSIzIDMiLz4KPHRleHQgeD0iMjA2IiB5PSIxNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+KGFkYXB0ZXIgcmVzdGFydCk8L3RleHQ+Cjx0ZXh0IHg9IjIwNiIgeT0iMTY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPkRlbGV0ZSAvIENoYW5nZVZpc2liaWxpdHkgdXNlIHRoaXMgcmVjZWlwdDwvdGV4dD4KPGxpbmUgeDE9IjM5OCIgeTE9IjM0IiB4Mj0iMzk4IiB5Mj0iMTg0IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjQyNCIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjYzljZmQ4Ij5QRVItTUVTU0FHRSBWSVNJQklMSVRZPC90ZXh0Pgo8cmVjdCB4PSI0MjQiIHk9IjM4IiB3aWR0aD0iMzg2IiBoZWlnaHQ9IjE0MiIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxsaW5lIHgxPSI0NDYiIHkxPSIxMDQiIHgyPSI4MDYiIHkyPSIxMDQiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIyIi8+CjxyZWN0IHg9IjQ0NiIgeT0iODgiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTgiIHJ4PSI0IiBmaWxsPSIjMWEzMTI3IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMSIvPgo8dGV4dCB4PSI1MjEiIHk9IjgwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzkwZGVjNiI+U1FTIG1heCAxMmg8L3RleHQ+Cjx0ZXh0IHg9IjY3NiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5oZWFkcm9vbSwgbm8gY2xhbXA8L3RleHQ+CjxsaW5lIHgxPSI3NzAiIHkxPSI3MCIgeDI9Ijc3MCIgeTI9IjEyMCIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIuNSIvPgo8dGV4dCB4PSI3NzAiIHk9IjY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2RlYjI5MCI+UVMgN2QgY2VpbGluZzwvdGV4dD4KPHRleHQgeD0iNjE3IiB5PSIxNDIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5DaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSDihpIgdXBkYXRlX21lc3NhZ2UgcmUtc3RhbXBzIHRpbWVfbmV4dF92aXNpYmxlPC90ZXh0Pgo8dGV4dCB4PSI2MTciIHk9IjE2MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICM5NGEzYjgiPnZpc2liaWxpdHkgMCA9IHJlLWNsYWltIG5vdyDCtyBzdGFsZSBwb3BfcmVjZWlwdCA9IG5vLW9wLCBsaWtlIFNRUzwvdGV4dD4KPC9zdmc+" alt="A receipt handle contains the queue, message_id and native pop_receipt token. Azure Queue Storage keeps the message and visibility deadline, so a current receipt still works after an adapter restart. Visibility is per-message: SQS's 12-hour maximum fits with headroom under Queue Storage's 7-day ceiling, so ChangeMessageVisibility re-stamps time_next_visible with no clamp." />
</div>

<p className="t9-caption">Queue Storage accepts the native pop\_receipt across adapter restarts. SQS's 12-hour visibility fits within Queue Storage's 7-day ceiling.</p>

#### Payload size and dead-letter delivery

`message_text` must be safe for XML and UTF-8, so the adapter base64-encodes each body. Encoding expands it by about 4/3; Queue Storage's 64 KiB limit therefore permits roughly 48 KiB of raw payload, less when attributes add overhead. The adapter checks encoded size and returns `InvalidParameterValue` with the size and limit for an oversized send. For larger messages, use another target or store the body in Blob Storage and send its location.

Queue Storage does not move messages to a dead-letter queue automatically. The adapter exposes `dequeue_count` as `ApproximateReceiveCount`; your application uses it to decide when to move a message to a separately provisioned `<queue>-poison` queue. Copying there and deleting the source are separate operations, so account for interruption between them. Cosmos DB and Service Bus perform dead-letter delivery through their adapters or broker.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjIwIiB2aWV3Qm94PSIwIDAgODM2IDIyMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJRdWV1ZSBTdG9yYWdlIGxpbWl0cyBtZXNzYWdlX3RleHQgdG8gNjQgS2lCLiBCYXNlNjQgZW5jb2RpbmcgZXhwYW5kcyB0aGUgYm9keSBieSBhYm91dCBvbmUgdGhpcmQsIGxlYXZpbmcgcm91Z2hseSA0OCBLaUIgYmVmb3JlIGF0dHJpYnV0ZSBvdmVyaGVhZC4gT3ZlcnNpemUgc2VuZHMgcmV0dXJuIEludmFsaWRQYXJhbWV0ZXJWYWx1ZS4gQXBwbGljYXRpb25zIG11c3QgbW92ZSBmYWlsZWQgbWVzc2FnZXMgdG8gYSBzZXBhcmF0ZWx5IHByb3Zpc2lvbmVkIGRlYWQtbGV0dGVyIHF1ZXVlIHVzaW5nIEFwcHJveGltYXRlUmVjZWl2ZUNvdW50OyB0aGUgYWRhcHRlciBkb2VzIG5vdCBwZXJmb3JtIHRoYXQgbW92ZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InB4IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8dGV4dCB4PSIyNiIgeT0iMjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiNiNDUzMDkiPn40OCBLaUIgUEFZTE9BRCBDRUlMSU5HPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iMzQiIHdpZHRoPSIzODQiIGhlaWdodD0iMTcyIiByeD0iMTQiIGZpbGw9IiNmZmZiZWIiIHN0cm9rZT0iI2ZkZTY4YSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNDQiIHk9IjY4IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+ZXZlcnkgYm9keSBpcyBiYXNlNjQnZCBmb3IgWE1MLXNhZmV0eSAow5c0LzMpOjwvdGV4dD4KPHJlY3QgeD0iNDQiIHk9IjgyIiB3aWR0aD0iMTkyIiBoZWlnaHQ9IjI2IiByeD0iNSIgZmlsbD0iI2E3ZjNkMCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSIxNDAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPnJhdyBib2R5IH40OCBLaUI8L3RleHQ+CjxyZWN0IHg9IjIzNiIgeT0iODIiIHdpZHRoPSI2NCIgaGVpZ2h0PSIyNiIgcng9IjUiIGZpbGw9IiNmZGU2OGEiIHN0cm9rZT0iI2Y1OWUwYiIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMjY4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGI7IGZpbGw6I2I0NTMwOSI+K8OXNC8zPC90ZXh0Pgo8bGluZSB4MT0iMzAwIiB5MT0iNzIiIHgyPSIzMDAiIHkyPSIxMTgiIHN0cm9rZT0iI2RjMjYyNiIgc3Ryb2tlLXdpZHRoPSIyLjUiLz4KPHRleHQgeD0iMzAwIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiNiOTFjMWMiPjY0IEtpQiBlbmNvZGVkIGxpbWl0PC90ZXh0Pgo8dGV4dCB4PSI0NCIgeT0iMTYyIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+Y2hlY2tlZCBvbiB0aGUgZW5jb2RlZCB3aXJlIChtZXNzYWdlX3RleHQpLDwvdGV4dD4KPHRleHQgeD0iNDQiIHk9IjE3OSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPm5vdCB0aGUgcmF3IGJvZHksIG92ZXJzaXplIOKGkiBJbnZhbGlkUGFyYW1ldGVyVmFsdWU8L3RleHQ+Cjx0ZXh0IHg9IjIxMiIgeT0iMTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDA7ZmlsbDojYjQ1MzA5Ij5pbmNsdWRlcyBhdHRyaWJ1dGUgb3ZlcmhlYWQ8L3RleHQ+CjxsaW5lIHgxPSI0MTYiIHkxPSIzMCIgeDI9IjQxNiIgeTI9IjIwNiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI0MzIiIHk9IjI0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojYjQ1MzA5Ij5OTyBOQVRJVkUgREVBRC1MRVRURVI8L3RleHQ+CjxyZWN0IHg9IjQyOCIgeT0iMzQiIHdpZHRoPSIzODQiIGhlaWdodD0iMTcyIiByeD0iMTQiIGZpbGw9IiNmZmZiZWIiIHN0cm9rZT0iI2ZkZTY4YSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHJlY3QgeD0iNDQ2IiB5PSI1NiIgd2lkdGg9IjE1MCIgaGVpZ2h0PSI0NiIgcng9IjEwIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNmZGU2OGEiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjUyMSIgeT0iNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTFweCI+ZGVxdWV1ZV9jb3VudDwvdGV4dD4KPHRleHQgeD0iNTIxIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6I2I0NTMwOSI+4omlIG1heFJlY2VpdmVDb3VudDwvdGV4dD4KPGxpbmUgeDE9IjU5NiIgeTE9Ijc5IiB4Mj0iNjI4IiB5Mj0iNzkiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcHgpIi8+Cjx0ZXh0IHg9IjYxMiIgeT0iNzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiIj5hcHA8L3RleHQ+CjxyZWN0IHg9IjYzMCIgeT0iNTYiIHdpZHRoPSIxNjYiIGhlaWdodD0iNDYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI3MTMiIHk9Ijc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjExcHgiPiZsdDtxdWV1ZSZndDstcG9pc29uPC90ZXh0Pgo8dGV4dCB4PSI3MTMiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij55b3UgcHJvdmlzaW9uIGl0OyB0aGUgYXBwIG1vdmVzPC90ZXh0Pgo8dGV4dCB4PSI0NDYiIHk9IjEzMCIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnRoZSBhZGFwdGVyIGV4cG9zZXMgZGVxdWV1ZV9jb3VudCBzbyB5b3VyIHBvaXNvbjwvdGV4dD4KPHRleHQgeD0iNDQ2IiB5PSIxNDgiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5sb2dpYyB3b3JrcywgaXQgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IG1vdmUgbWVzc2FnZXM6PC90ZXh0Pgo8dGV4dCB4PSI0NDYiIHk9IjE2NiIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZpbGw6Izk0YTNiOCI+YW4gYWRhcHRlci1zaWRlIG1vdmUgaXMgbm9uLWF0b21pYywgbG9zcy9kdXAtcHJvbmUgb24gY3Jhc2g8L3RleHQ+Cjx0ZXh0IHg9IjYyMCIgeT0iMTkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDA7ZmlsbDojYjQ1MzA5Ij5NaWNyb3NvZnQncyBvd24gcHJlc2NyaWJlZCBwYXR0ZXJuPC90ZXh0Pgo8L3N2Zz4=" alt="Queue Storage limits message_text to 64 KiB. Base64 encoding expands the body by about one third, leaving roughly 48 KiB before attribute overhead. Oversize sends return InvalidParameterValue. Applications must move failed messages to a separately provisioned dead-letter queue using ApproximateReceiveCount; the adapter does not perform that move." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjIwIiB2aWV3Qm94PSIwIDAgODM2IDIyMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJRdWV1ZSBTdG9yYWdlIGxpbWl0cyBtZXNzYWdlX3RleHQgdG8gNjQgS2lCLiBCYXNlNjQgZW5jb2RpbmcgZXhwYW5kcyB0aGUgYm9keSBieSBhYm91dCBvbmUgdGhpcmQsIGxlYXZpbmcgcm91Z2hseSA0OCBLaUIgYmVmb3JlIGF0dHJpYnV0ZSBvdmVyaGVhZC4gT3ZlcnNpemUgc2VuZHMgcmV0dXJuIEludmFsaWRQYXJhbWV0ZXJWYWx1ZS4gQXBwbGljYXRpb25zIG11c3QgbW92ZSBmYWlsZWQgbWVzc2FnZXMgdG8gYSBzZXBhcmF0ZWx5IHByb3Zpc2lvbmVkIGRlYWQtbGV0dGVyIHF1ZXVlIHVzaW5nIEFwcHJveGltYXRlUmVjZWl2ZUNvdW50OyB0aGUgYWRhcHRlciBkb2VzIG5vdCBwZXJmb3JtIHRoYXQgbW92ZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InB4IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8dGV4dCB4PSIyNiIgeT0iMjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjZGViMjkwIj5+NDggS2lCIFBBWUxPQUQgQ0VJTElORzwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjM0IiB3aWR0aD0iMzg0IiBoZWlnaHQ9IjE3MiIgcng9IjE0IiBmaWxsPSIjMzEyZDFhIiBzdHJva2U9IiM2NjVkM2QiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjQ0IiB5PSI2OCIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmV2ZXJ5IGJvZHkgaXMgYmFzZTY0J2QgZm9yIFhNTC1zYWZldHkgKMOXNC8zKTo8L3RleHQ+CjxyZWN0IHg9IjQ0IiB5PSI4MiIgd2lkdGg9IjE5MiIgaGVpZ2h0PSIyNiIgcng9IjUiIGZpbGw9IiMxYTMxMjciIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMTQwIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj5yYXcgYm9keSB+NDggS2lCPC90ZXh0Pgo8cmVjdCB4PSIyMzYiIHk9IjgyIiB3aWR0aD0iNjQiIGhlaWdodD0iMjYiIHJ4PSI1IiBmaWxsPSIjMzEyZDFhIiBzdHJva2U9IiNmNTllMGIiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjI2OCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGViMjkwIj4rw5c0LzM8L3RleHQ+CjxsaW5lIHgxPSIzMDAiIHkxPSI3MiIgeDI9IjMwMCIgeTI9IjExOCIgc3Ryb2tlPSIjZGMyNjI2IiBzdHJva2Utd2lkdGg9IjIuNSIvPgo8dGV4dCB4PSIzMDAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNkZTkwOTAiPjY0IEtpQiBlbmNvZGVkIGxpbWl0PC90ZXh0Pgo8dGV4dCB4PSI0NCIgeT0iMTYyIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+Y2hlY2tlZCBvbiB0aGUgZW5jb2RlZCB3aXJlIChtZXNzYWdlX3RleHQpLDwvdGV4dD4KPHRleHQgeD0iNDQiIHk9IjE3OSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPm5vdCB0aGUgcmF3IGJvZHksIG92ZXJzaXplIOKGkiBJbnZhbGlkUGFyYW1ldGVyVmFsdWU8L3RleHQ+Cjx0ZXh0IHg9IjIxMiIgeT0iMTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDA7ZmlsbDogI2RlYjI5MCI+aW5jbHVkZXMgYXR0cmlidXRlIG92ZXJoZWFkPC90ZXh0Pgo8bGluZSB4MT0iNDE2IiB5MT0iMzAiIHgyPSI0MTYiIHkyPSIyMDYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNDMyIiB5PSIyNCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICNkZWIyOTAiPk5PIE5BVElWRSBERUFELUxFVFRFUjwvdGV4dD4KPHJlY3QgeD0iNDI4IiB5PSIzNCIgd2lkdGg9IjM4NCIgaGVpZ2h0PSIxNzIiIHJ4PSIxNCIgZmlsbD0iIzMxMmQxYSIgc3Ryb2tlPSIjNjY1ZDNkIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8cmVjdCB4PSI0NDYiIHk9IjU2IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjQ2IiByeD0iMTAiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzY2NWQzZCIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNTIxIiB5PSI3NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMXB4Ij5kZXF1ZXVlX2NvdW50PC90ZXh0Pgo8dGV4dCB4PSI1MjEiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2RlYjI5MCI+4omlIG1heFJlY2VpdmVDb3VudDwvdGV4dD4KPGxpbmUgeDE9IjU5NiIgeTE9Ijc5IiB4Mj0iNjI4IiB5Mj0iNzkiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcHgpIi8+Cjx0ZXh0IHg9IjYxMiIgeT0iNzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij5hcHA8L3RleHQ+CjxyZWN0IHg9IjYzMCIgeT0iNTYiIHdpZHRoPSIxNjYiIGhlaWdodD0iNDYiIHJ4PSIxMCIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI3MTMiIHk9Ijc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjExcHgiPiZsdDtxdWV1ZSZndDstcG9pc29uPC90ZXh0Pgo8dGV4dCB4PSI3MTMiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij55b3UgcHJvdmlzaW9uIGl0OyB0aGUgYXBwIG1vdmVzPC90ZXh0Pgo8dGV4dCB4PSI0NDYiIHk9IjEzMCIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnRoZSBhZGFwdGVyIGV4cG9zZXMgZGVxdWV1ZV9jb3VudCBzbyB5b3VyIHBvaXNvbjwvdGV4dD4KPHRleHQgeD0iNDQ2IiB5PSIxNDgiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5sb2dpYyB3b3JrcywgaXQgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IG1vdmUgbWVzc2FnZXM6PC90ZXh0Pgo8dGV4dCB4PSI0NDYiIHk9IjE2NiIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICM5NGEzYjgiPmFuIGFkYXB0ZXItc2lkZSBtb3ZlIGlzIG5vbi1hdG9taWMsIGxvc3MvZHVwLXByb25lIG9uIGNyYXNoPC90ZXh0Pgo8dGV4dCB4PSI2MjAiIHk9IjE5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwO2ZpbGw6ICNkZWIyOTAiPk1pY3Jvc29mdCdzIG93biBwcmVzY3JpYmVkIHBhdHRlcm48L3RleHQ+Cjwvc3ZnPg==" alt="Queue Storage limits message_text to 64 KiB. Base64 encoding expands the body by about one third, leaving roughly 48 KiB before attribute overhead. Oversize sends return InvalidParameterValue. Applications must move failed messages to a separately provisioned dead-letter queue using ApproximateReceiveCount; the adapter does not perform that move." />
</div>

<p className="t9-caption">Base64 encoding reduces the usable payload to roughly 48 KiB. Queue Storage has no automatic dead-letter delivery; the application moves failed messages to a separately provisioned queue.</p>

#### Limitations

△ Where SQS and Queue Storage diverge, read before you adopt

* **Classic queues only: FIFO is rejected.** Queue Storage has no session, ordering, or dedup analog, so a `.fifo` origin is routed to Service Bus at compile time, and any `.fifo` traffic that still reaches this backend (a pre-declared queue or an out-of-band URL) is rejected with an error on send, receive, create, and purge. There is no message-group ordering and no deduplication here at all.
* **The usable payload is roughly 48 KiB.** Base64 encoding expands the body by about 4/3, and attribute overhead also counts toward Queue Storage's 64 KiB encoded limit. Oversized sends return `InvalidParameterValue`. See the payload-size section.
* **Your application must move failed messages.** Use `ApproximateReceiveCount` to decide when to copy a message to `<queue>-poison` and delete the source. The copy and deletion are separate operations; handle retries if interrupted.
* **Batch calls make sequential requests.** `SendMessageBatch`, `DeleteMessageBatch` and `ChangeMessageVisibilityBatch` make one request per entry and return each entry's success or failure.
* **Some queue policies have no native target.** The Max catalog stores visibility and retention defaults, which the adapter applies to individual messages. Nonzero queue-level delay and a dead-letter route are rejected because this backend cannot apply them as queue policies. Per-message delay remains available.
* **Retention uses a per-message TTL.** The Max adapter reads the queue's declared `MessageRetentionPeriod` and applies it as `message_time_to_live` on each send. SQS permits 60 seconds to 14 days. Queue Storage also permits shorter lifetimes and `-1` for no expiry, but those are native backend extensions, not SQS retention values. Queue Storage defaults to 7 days when TTL is omitted; a `DelaySeconds` that meets or exceeds the retention is the degenerate never-visible case and is rejected with an error.
* **`SentTimestamp` is omitted.** The adapter does not have a reliable original enqueue time to return on redelivery. It does return `ApproximateReceiveCount` from Queue Storage's dequeue count.
* **Counts come from Queue Storage.** `ApproximateNumberOfMessages` uses the service's `approximate_messages_count` from get-properties. Use Azure monitoring for request volume and latency.
* **Provisioning and queue management have separate scopes.** Terraform creates the storage account and initial queues. The Max queue catalog handles logical listings, tags and supported edits; changes must pass the backend's policy and message-size checks.
* **Single storage account; durability is Microsoft's.** The data-plane path reaches one storage account keylessly via AKS Workload Identity; Microsoft operates Queue Storage's durability, backup, replication, and HA, and Tensor9 operates the adapter.

#### Other considerations

* **Plan message cutover.** Your application, SQS SDK and queue declarations are retained, but existing messages are not migrated. New queues start empty. Drain the SQS source or dual-write during the transition.
* **Your application handles dead-letter delivery.** Microsoft operates Queue Storage's durability, backup, replication and availability; Tensor9 operates the adapter. Your application moves failed messages to `<queue>-poison` using `ApproximateReceiveCount`.
* **Where durability lives.** Durability is a property of the storage account, not the individual queue: its redundancy tier (LRS, ZRS, GRS, or GZRS) is a setting on the account that every queue in it inherits, so pick the tier that matches the availability your workload needs before you provision.
* **Include idle polls in cost estimates.** Queue Storage bills for transactions and stored capacity. A `ReceiveMessage` long poll checks for messages about every 300 ms, so an idle long poll generates several billable requests.

### Via Azure Service Bus

| Operation                                            | Area           | Support      | Depth        | Notes                                                                                                                                                                                      |
| ---------------------------------------------------- | -------------- | ------------ | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Dead-letter redrive                                  | Dead-letter    | Supported    | Most usage   | native; the dead-letter threshold maps to the backend's delivery-count limit                                                                                                               |
| DeleteQueue / ListQueues / SetQueueAttributes / tags | Queues         | Partial      | Full surface | Max manages logical queues, tags and supported edits; native entities remain provisioned through Terraform. Retention changes, nonzero queue delay and new dead-letter routes are rejected |
| GetQueueAttributes (message counts)                  | Queues         | Out of scope | Full surface | live message counts are unavailable and omitted; declared configuration is returned separately                                                                                             |
| DelaySeconds                                         | Send / receive | Supported    | Common       | translated to a scheduled enqueue, capped at 900 s; beyond is rejected                                                                                                                     |
| DeleteMessage                                        | Send / receive | Supported    | Common       | completes the lock by receipt handle                                                                                                                                                       |
| ReceiveMessage                                       | Send / receive | Supported    | Common       | takes a PeekLock; ApproximateReceiveCount is a real delivery count                                                                                                                         |
| SendMessage                                          | Send / receive | Supported    | Common       | attributes are stored as application\_properties; MD5 checksums recomputed for your SDK                                                                                                    |
| SendMessageBatch                                     | Send / receive | Supported    | Common       | up to 10 messages per call; returns the result for each entry                                                                                                                              |
| ChangeMessageVisibility                              | Visibility     | Partial      | Common       | renew/abandon by handle; the visibility timeout is capped at 5 minutes, longer is rejected with an error                                                                                   |

#### How it works

Tensor9 adds an adapter, a proxy process, to your application pod and sets `AWS_ENDPOINT_URL_SQS` to its loopback address. Your application keeps its `SendMessage` and `ReceiveMessage` calls. The adapter translates them to Azure Service Bus operations and returns SQS responses, error codes and MD5 checksums.

A standard queue maps to a Service Bus queue using AMQP 1.0. `SendMessage` publishes through a Service Bus sender; SQS attributes become `application_properties`, and `DelaySeconds` sets a scheduled enqueue time. Receiving locks a message with PeekLock. Deleting completes it on the receiver that obtained the lock; changing visibility renews or abandons that lock. Delivery is at-least-once with best-effort ordering and no deduplication. FIFO queues use the separate session-based target.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24ncyBTUVMgU0RLIGNhbGxzIEFtYXpvbiBTUVMgKGEgc3RhbmRhcmQgcXVldWUpLiBBZnRlcjogaW4gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBhcHBsaWNhdGlvbiBhbmQgU0RLIGNhbGwgYSBUZW5zb3I5IGFkYXB0ZXIsIHdoaWNoIHNlcnZlcyB0aGUgU1FTIEFQSSBmcm9tIGFuIEF6dXJlIFNlcnZpY2UgQnVzIHF1ZXVlIG92ZXIgQU1RUCAxLjAgUGVla0xvY2suIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJjYmgxIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDYiIHdpZHRoPSIzNTgiIGhlaWdodD0iMTE4IiByeD0iMTQiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiM5NGEzYjgiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9IjgwIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iOTAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMi41cHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI5MCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+U1FTIFNESzwvdGV4dD4KPGxpbmUgeDE9IjE1MCIgeTE9IjExMyIgeDI9IjIxMCIgeTI9IjExMyIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjY2JoMSkiLz4KPHRleHQgeD0iMTgxIiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OC41cHgiPlNRUyBBUEk8L3RleHQ+CjxyZWN0IHg9IjIxNCIgeT0iODAiIHdpZHRoPSIxNDgiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyODgiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5BbWF6b24gU1FTPC90ZXh0Pgo8dGV4dCB4PSIyODgiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPlN0YW5kYXJkIMK3IEFXUy1tYW5hZ2VkPC90ZXh0Pgo8bGluZSB4MT0iNDE4IiB5MT0iNDAiIHgyPSI0MTgiIHkyPSIxNjAiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHJlY3QgeD0iNDYyIiB5PSI0NiIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMTgiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPk9OIFRIRSBUQVJHRVQgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjQ3NCIgeT0iODAiIHdpZHRoPSI5MiIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUyMCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI1MjAiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5Ij5zYW1lIFNESzwvdGV4dD4KPGxpbmUgeDE9IjU2NiIgeTE9IjExMyIgeDI9IjU5MCIgeTI9IjExMyIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjY2JoMSkiLz4KPHJlY3QgeD0iNTk0IiB5PSI3NiIgd2lkdGg9IjExMCIgaGVpZ2h0PSI3NCIgcng9IjExIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjY0OSIgeT0iMTAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPlRlbnNvcjk8L3RleHQ+Cjx0ZXh0IHg9IjY0OSIgeT0iMTE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5zZXJ2aWNlPC90ZXh0Pgo8dGV4dCB4PSI2NDkiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+YWRhcHRlcjwvdGV4dD4KPGxpbmUgeDE9IjcwNCIgeTE9IjExMyIgeDI9IjcyOCIgeTI9IjExMyIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjY2JoMSkiLz4KPHRleHQgeD0iNzE2IiB5PSIxMDYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OHB4Ij5BTVFQPC90ZXh0Pgo8cmVjdCB4PSI3MzIiIHk9IjgwIiB3aWR0aD0iODQiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI3NzQiIHk9IjEwNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZTo5LjVweCI+U2VydmljZSBCdXM8L3RleHQ+Cjx0ZXh0IHg9Ijc3NCIgeT0iMTI1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+UGVla0xvY2s8L3RleHQ+Cjwvc3ZnPg==" alt="Before: on AWS the application's SQS SDK calls Amazon SQS (a standard queue). After: in the target cloud the same application and SDK call a Tensor9 adapter, which serves the SQS API from an Azure Service Bus queue over AMQP 1.0 PeekLock." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24ncyBTUVMgU0RLIGNhbGxzIEFtYXpvbiBTUVMgKGEgc3RhbmRhcmQgcXVldWUpLiBBZnRlcjogaW4gdGhlIHRhcmdldCBjbG91ZCB0aGUgc2FtZSBhcHBsaWNhdGlvbiBhbmQgU0RLIGNhbGwgYSBUZW5zb3I5IGFkYXB0ZXIsIHdoaWNoIHNlcnZlcyB0aGUgU1FTIEFQSSBmcm9tIGFuIEF6dXJlIFNlcnZpY2UgQnVzIHF1ZXVlIG92ZXIgQU1RUCAxLjAgUGVla0xvY2suIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJjYmgxIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDYiIHdpZHRoPSIzNTgiIGhlaWdodD0iMTE4IiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI4MCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjkwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iOTAiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPlNRUyBTREs8L3RleHQ+CjxsaW5lIHgxPSIxNTAiIHkxPSIxMTMiIHgyPSIyMTAiIHkyPSIxMTMiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2NiaDEpIi8+Cjx0ZXh0IHg9IjE4MSIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZm9udC1zaXplOjguNXB4Ij5TUVMgQVBJPC90ZXh0Pgo8cmVjdCB4PSIyMTQiIHk9IjgwIiB3aWR0aD0iMTQ4IiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjg4IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+QW1hem9uIFNRUzwvdGV4dD4KPHRleHQgeD0iMjg4IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5TdGFuZGFyZCDCtyBBV1MtbWFuYWdlZDwvdGV4dD4KPGxpbmUgeDE9IjQxOCIgeTE9IjQwIiB4Mj0iNDE4IiB5Mj0iMTYwIiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxyZWN0IHg9IjQ2MiIgeT0iNDYiIHdpZHRoPSIzNjIiIGhlaWdodD0iMTE4IiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSI0NzYiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwZGVjOCI+T04gVEhFIFRBUkdFVCBDTE9VRDwvdGV4dD4KPHJlY3QgeD0iNDc0IiB5PSI4MCIgd2lkdGg9IjkyIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNTIwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjUyMCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnNhbWUgU0RLPC90ZXh0Pgo8bGluZSB4MT0iNTY2IiB5MT0iMTEzIiB4Mj0iNTkwIiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNjYmgxKSIvPgo8cmVjdCB4PSI1OTQiIHk9Ijc2IiB3aWR0aD0iMTEwIiBoZWlnaHQ9Ijc0IiByeD0iMTEiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iNjQ5IiB5PSIxMDIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTJweCI+VGVuc29yOTwvdGV4dD4KPHRleHQgeD0iNjQ5IiB5PSIxMTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPnNlcnZpY2U8L3RleHQ+Cjx0ZXh0IHg9IjY0OSIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5hZGFwdGVyPC90ZXh0Pgo8bGluZSB4MT0iNzA0IiB5MT0iMTEzIiB4Mj0iNzI4IiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNjYmgxKSIvPgo8dGV4dCB4PSI3MTYiIHk9IjEwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZTo4cHgiPkFNUVA8L3RleHQ+CjxyZWN0IHg9IjczMiIgeT0iODAiIHdpZHRoPSI4NCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijc3NCIgeT0iMTA3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjkuNXB4Ij5TZXJ2aWNlIEJ1czwvdGV4dD4KPHRleHQgeD0iNzc0IiB5PSIxMjUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5QZWVrTG9jazwvdGV4dD4KPC9zdmc+" alt="Before: on AWS the application's SQS SDK calls Amazon SQS (a standard queue). After: in the target cloud the same application and SDK call a Tensor9 adapter, which serves the SQS API from an Azure Service Bus queue over AMQP 1.0 PeekLock." />
</div>

<p className="t9-caption">The application calls its existing SQS SDK; the adapter translates those calls to Azure Service Bus operations.</p>

#### Architecture

The Rust adapter translates SQS operations to Service Bus Standard over AMQP 1.0. It authenticates with the customer's AKS Workload Identity and the `Azure Service Bus Data Owner` role. This grants access to messages without a static secret; it does not grant permission to create or configure queues.

SQS `ReceiveMessage` then `DeleteMessage` are separate API calls: the opaque receipt handle holds the state between them. Service Bus PeekLock works differently: the lock-token is bound to the **receiver link** that fetched it, and only that same receiver can complete, abandon, or renew it. So the adapter runs a **receiver pool**: one long-lived PeekLock receiver per queue (with `prefetch` pinned to `0`, so a message's lock clock never starts before a caller asks for it), a `receipt-handle → in-flight-message` registry, and a background renew loop that keeps each in-flight lock alive under your requested visibility window against Service Bus's 5-minute lock cap. Senders share the client; each received message is settled on the very link that fetched it.

Service Bus entity CRUD (creating a queue, setting its lock duration, its DLQ, its retention) is **control-plane** (ARM), and the keyless data-plane role grants data access, not namespace entity management. The backend uses **pre-provisioned entities**: the compiler provisions the namespace and queue at apply-time (a 5-minute lock, a redelivery limit from your redrive policy, and DLQ auto-forwarding), and `CreateQueue` merely verifies the queue is reachable by opening a sender. Microsoft operates Service Bus's durability, backup, and HA; Tensor9 operates the adapter.

* **Each message uses its original receiver until settlement.** The adapter records receipt handles with the Service Bus receiver that obtained each lock. Prefetch is zero, so a lock starts only when a consumer requests a message.
* **Entities are provisioned at apply-time, never by the data plane.** A 5-minute lock, a redelivery limit, and DLQ forwarding are compiled from your queue's declared attributes; the adapter never needs, and never holds, a control-plane credential.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjUwIiB2aWV3Qm94PSIwIDAgODM2IDI1MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcmNoaXRlY3R1cmU6IHRoZSBhcHAncyBTUVMgU0RLIGNhbGxzIGEgUnVzdCBUZW5zb3I5IGFkYXB0ZXIgb3ZlciB0aGUgcG9kIGxvb3BiYWNrLiBUaGUgYWRhcHRlciBydW5zIGEgcmVjZWl2ZXIgcG9vbCAob25lIGxvbmctbGl2ZWQgUGVla0xvY2sgcmVjZWl2ZXIgcGVyIHF1ZXVlIHdpdGggcHJlZmV0Y2ggcGlubmVkIHRvIHplcm8sIGEgcmVjZWlwdC1oYW5kbGUgdG8gaW4tZmxpZ2h0LW1lc3NhZ2UgcmVnaXN0cnksIGFuZCBhIHJlbmV3IGxvb3ApLCBhbmQgc2VydmVzIHRoZSBBUEkgZnJvbSBhbiBBenVyZSBTZXJ2aWNlIEJ1cyAoU3RhbmRhcmQpIHF1ZXVlIHRoZSBjb21waWxlciBwcm92aXNpb25zIGF0IGFwcGx5IHRpbWUgd2l0aCBhIDUtbWludXRlIGxvY2ssIGEgcmVkZWxpdmVyeSBsaW1pdCwgYW5kIGRlYWQtbGV0dGVyIGZvcndhcmRpbmcuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJjYmEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8L2RlZnM+CjxyZWN0IHg9IjgiIHk9IjM0IiB3aWR0aD0iODIwIiBoZWlnaHQ9IjIwOCIgcng9IjE2IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMjYiIHk9IjU0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiOCI+Q1VTVE9NRVInUyBDTE9VRDwvdGV4dD4KPHJlY3QgeD0iMjQiIHk9IjEwOCIgd2lkdGg9IjExMiIgaGVpZ2h0PSI5MiIgcng9IjEyIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjgwIiB5PSIxNDYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTNweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjgwIiB5PSIxNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5TUVMgU0RLPC90ZXh0Pgo8dGV4dCB4PSI4MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNTk2NjkiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjEzNiIgeTE9IjE1NCIgeDI9IjE4NCIgeTI9IjE1NCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjY2JhKSIvPgo8dGV4dCB4PSIxNjAiIHk9IjE0NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGIiPlNRUyBBUEk8L3RleHQ+CjxyZWN0IHg9IjE4OCIgeT0iNzIiIHdpZHRoPSIyMjQiIGhlaWdodD0iMTUyIiByeD0iMTMiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMzAwIiB5PSI5NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxM3B4Ij5UZW5zb3I5IGxheWVyPC90ZXh0Pgo8dGV4dCB4PSIzMDAiIHk9IjEwOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+cmVjZWl2ZXIgcG9vbCDCtyBSdXN0IMK3IGxvY2FsIGxvY2tzPC90ZXh0Pgo8cmVjdCB4PSIyMDIiIHk9IjEyMCIgd2lkdGg9IjE5NiIgaGVpZ2h0PSI0MiIgcng9IjgiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iMzAwIiB5PSIxMzciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiM0NzU1NjkiPlBlZWtMb2NrIHJlY2VpdmVyIC8gcXVldWU8L3RleHQ+Cjx0ZXh0IHg9IjMwMCIgeT0iMTUyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+cHJlZmV0Y2ggPSAwIMK3IHNlbmRlcnMgc2hhcmUgY2xpZW50PC90ZXh0Pgo8cmVjdCB4PSIyMDIiIHk9IjE3MCIgd2lkdGg9IjE5NiIgaGVpZ2h0PSI0NCIgcng9IjgiIGZpbGw9IiNmZmYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iMzAwIiB5PSIxODciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiMwNDc4NTciPnJlY2VpcHQtaGFuZGxlIHJlZ2lzdHJ5PC90ZXh0Pgo8dGV4dCB4PSIzMDAiIHk9IjIwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnJlbmV3IGxvb3AgwrcgNS1taW4gbG9jayBjYXA8L3RleHQ+CjxsaW5lIHgxPSI0MTIiIHkxPSIxNDgiIHgyPSI0NjAiIHkyPSIxNDgiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2NiYSkiLz4KPHRleHQgeD0iNDM2IiB5PSIxNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiIj5BTVFQIDEuMDwvdGV4dD4KPHRleHQgeD0iNDM2IiB5PSIxNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiIj5rZXlsZXNzPC90ZXh0Pgo8cmVjdCB4PSI0NjQiIHk9IjcyIiB3aWR0aD0iMzQ4IiBoZWlnaHQ9IjE1MiIgcng9IjEzIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjYzOCIgeT0iOTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5BenVyZSBTZXJ2aWNlIEJ1cyAoU3RhbmRhcmQpPC90ZXh0Pgo8dGV4dCB4PSI2MzgiIHk9IjEwOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6MTBweCAnU0YgTW9ubycsTWVubG8sbW9ub3NwYWNlO2ZpbGw6IzY0NzQ4YiI+cXVldWUgwrcgcHJvdmlzaW9uZWQgYXQgYXBwbHktdGltZSAoQVJNKTwvdGV4dD4KPHJlY3QgeD0iNDgwIiB5PSIxMjAiIHdpZHRoPSIzMTYiIGhlaWdodD0iMjgiIHJ4PSI2IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjQ5MiIgeT0iMTM4IiBzdHlsZT0iZm9udDoxMHB4ICdTRiBNb25vJyxNZW5sbyxtb25vc3BhY2U7ZmlsbDojMzM0MTU1Ij5xdWV1ZTogb3JkZXJzPC90ZXh0Pgo8dGV4dCB4PSI3OTIiIHk9IjEzOCIgdGV4dC1hbmNob3I9ImVuZCIgc3R5bGU9ImZvbnQ6MTBweCAnU0YgTW9ubycsTWVubG8sbW9ub3NwYWNlO2ZpbGw6IzQ3NTU2OSI+bTEgwrcgbTIgwrcgbTM8L3RleHQ+CjxyZWN0IHg9IjQ4MCIgeT0iMTUyIiB3aWR0aD0iMzE2IiBoZWlnaHQ9IjI2IiByeD0iNiIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI0OTIiIHk9IjE2OSIgc3R5bGU9ImZvbnQ6OS41cHggJ1NGIE1vbm8nLE1lbmxvLG1vbm9zcGFjZTtmaWxsOiM0NzU1NjkiPjUtbWludXRlIGxvY2sgwrcgcmVkZWxpdmVyeSBsaW1pdDwvdGV4dD4KPHJlY3QgeD0iNDgwIiB5PSIxODIiIHdpZHRoPSIzMTYiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjQ5MiIgeT0iMTk5IiBzdHlsZT0iZm9udDo5LjVweCAnU0YgTW9ubycsTWVubG8sbW9ub3NwYWNlO2ZpbGw6IzA0Nzg1NyI+ZGVhZC1sZXR0ZXIgZm9yd2FyZGluZyDihpIgRExRPC90ZXh0Pgo8L3N2Zz4=" alt="Architecture: the app's SQS SDK calls a Rust Tensor9 adapter over the pod loopback. The adapter runs a receiver pool (one long-lived PeekLock receiver per queue with prefetch pinned to zero, a receipt-handle to in-flight-message registry, and a renew loop), and serves the API from an Azure Service Bus (Standard) queue the compiler provisions at apply time with a 5-minute lock, a redelivery limit, and dead-letter forwarding." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjUwIiB2aWV3Qm94PSIwIDAgODM2IDI1MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcmNoaXRlY3R1cmU6IHRoZSBhcHAncyBTUVMgU0RLIGNhbGxzIGEgUnVzdCBUZW5zb3I5IGFkYXB0ZXIgb3ZlciB0aGUgcG9kIGxvb3BiYWNrLiBUaGUgYWRhcHRlciBydW5zIGEgcmVjZWl2ZXIgcG9vbCAob25lIGxvbmctbGl2ZWQgUGVla0xvY2sgcmVjZWl2ZXIgcGVyIHF1ZXVlIHdpdGggcHJlZmV0Y2ggcGlubmVkIHRvIHplcm8sIGEgcmVjZWlwdC1oYW5kbGUgdG8gaW4tZmxpZ2h0LW1lc3NhZ2UgcmVnaXN0cnksIGFuZCBhIHJlbmV3IGxvb3ApLCBhbmQgc2VydmVzIHRoZSBBUEkgZnJvbSBhbiBBenVyZSBTZXJ2aWNlIEJ1cyAoU3RhbmRhcmQpIHF1ZXVlIHRoZSBjb21waWxlciBwcm92aXNpb25zIGF0IGFwcGx5IHRpbWUgd2l0aCBhIDUtbWludXRlIGxvY2ssIGEgcmVkZWxpdmVyeSBsaW1pdCwgYW5kIGRlYWQtbGV0dGVyIGZvcndhcmRpbmcuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJjYmEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8L2RlZnM+CjxyZWN0IHg9IjgiIHk9IjM0IiB3aWR0aD0iODIwIiBoZWlnaHQ9IjIwOCIgcng9IjE2IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMjYiIHk9IjU0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiOCI+Q1VTVE9NRVInUyBDTE9VRDwvdGV4dD4KPHJlY3QgeD0iMjQiIHk9IjEwOCIgd2lkdGg9IjExMiIgaGVpZ2h0PSI5MiIgcng9IjEyIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjgwIiB5PSIxNDYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTNweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjgwIiB5PSIxNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5TUVMgU0RLPC90ZXh0Pgo8dGV4dCB4PSI4MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjEzNiIgeTE9IjE1NCIgeDI9IjE4NCIgeTI9IjE1NCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjY2JhKSIvPgo8dGV4dCB4PSIxNjAiIHk9IjE0NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDgiPlNRUyBBUEk8L3RleHQ+CjxyZWN0IHg9IjE4OCIgeT0iNzIiIHdpZHRoPSIyMjQiIGhlaWdodD0iMTUyIiByeD0iMTMiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMzAwIiB5PSI5NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxM3B4Ij5UZW5zb3I5IGxheWVyPC90ZXh0Pgo8dGV4dCB4PSIzMDAiIHk9IjEwOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+cmVjZWl2ZXIgcG9vbCDCtyBSdXN0IMK3IGxvY2FsIGxvY2tzPC90ZXh0Pgo8cmVjdCB4PSIyMDIiIHk9IjEyMCIgd2lkdGg9IjE5NiIgaGVpZ2h0PSI0MiIgcng9IjgiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iMzAwIiB5PSIxMzciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjYzljZmQ4Ij5QZWVrTG9jayByZWNlaXZlciAvIHF1ZXVlPC90ZXh0Pgo8dGV4dCB4PSIzMDAiIHk9IjE1MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnByZWZldGNoID0gMCDCtyBzZW5kZXJzIHNoYXJlIGNsaWVudDwvdGV4dD4KPHJlY3QgeD0iMjAyIiB5PSIxNzAiIHdpZHRoPSIxOTYiIGhlaWdodD0iNDQiIHJ4PSI4IiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjMwMCIgeT0iMTg3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzkwZGVjOCI+cmVjZWlwdC1oYW5kbGUgcmVnaXN0cnk8L3RleHQ+Cjx0ZXh0IHg9IjMwMCIgeT0iMjAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+cmVuZXcgbG9vcCDCtyA1LW1pbiBsb2NrIGNhcDwvdGV4dD4KPGxpbmUgeDE9IjQxMiIgeTE9IjE0OCIgeDI9IjQ2MCIgeTI9IjE0OCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjY2JhKSIvPgo8dGV4dCB4PSI0MzYiIHk9IjE0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDgiPkFNUVAgMS4wPC90ZXh0Pgo8dGV4dCB4PSI0MzYiIHk9IjE2MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDgiPmtleWxlc3M8L3RleHQ+CjxyZWN0IHg9IjQ2NCIgeT0iNzIiIHdpZHRoPSIzNDgiIGhlaWdodD0iMTUyIiByeD0iMTMiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4KPHRleHQgeD0iNjM4IiB5PSI5NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMi41cHgiPkF6dXJlIFNlcnZpY2UgQnVzIChTdGFuZGFyZCk8L3RleHQ+Cjx0ZXh0IHg9IjYzOCIgeT0iMTA4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDoxMHB4ICdTRiBNb25vJyxNZW5sbyxtb25vc3BhY2U7ZmlsbDogI2M5Y2ZkOCI+cXVldWUgwrcgcHJvdmlzaW9uZWQgYXQgYXBwbHktdGltZSAoQVJNKTwvdGV4dD4KPHJlY3QgeD0iNDgwIiB5PSIxMjAiIHdpZHRoPSIzMTYiIGhlaWdodD0iMjgiIHJ4PSI2IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjQ5MiIgeT0iMTM4IiBzdHlsZT0iZm9udDoxMHB4ICdTRiBNb25vJyxNZW5sbyxtb25vc3BhY2U7ZmlsbDogI2M5Y2ZkOCI+cXVldWU6IG9yZGVyczwvdGV4dD4KPHRleHQgeD0iNzkyIiB5PSIxMzgiIHRleHQtYW5jaG9yPSJlbmQiIHN0eWxlPSJmb250OjEwcHggJ1NGIE1vbm8nLE1lbmxvLG1vbm9zcGFjZTtmaWxsOiAjYzljZmQ4Ij5tMSDCtyBtMiDCtyBtMzwvdGV4dD4KPHJlY3QgeD0iNDgwIiB5PSIxNTIiIHdpZHRoPSIzMTYiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjQ5MiIgeT0iMTY5IiBzdHlsZT0iZm9udDo5LjVweCAnU0YgTW9ubycsTWVubG8sbW9ub3NwYWNlO2ZpbGw6ICNjOWNmZDgiPjUtbWludXRlIGxvY2sgwrcgcmVkZWxpdmVyeSBsaW1pdDwvdGV4dD4KPHJlY3QgeD0iNDgwIiB5PSIxODIiIHdpZHRoPSIzMTYiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjQ5MiIgeT0iMTk5IiBzdHlsZT0iZm9udDo5LjVweCAnU0YgTW9ubycsTWVubG8sbW9ub3NwYWNlO2ZpbGw6ICM5MGRlYzgiPmRlYWQtbGV0dGVyIGZvcndhcmRpbmcg4oaSIERMUTwvdGV4dD4KPC9zdmc+" alt="Architecture: the app's SQS SDK calls a Rust Tensor9 adapter over the pod loopback. The adapter runs a receiver pool (one long-lived PeekLock receiver per queue with prefetch pinned to zero, a receipt-handle to in-flight-message registry, and a renew loop), and serves the API from an Azure Service Bus (Standard) queue the compiler provisions at apply time with a 5-minute lock, a redelivery limit, and dead-letter forwarding." />
</div>

<p className="t9-caption">The adapter retains each receiving connection and receipt handle until the message is deleted or its lock expires. Terraform provisions the queue's lock duration, redelivery limit and dead-letter forwarding.</p>

#### Receiving messages

`ReceiveMessage` uses PeekLock to receive and lock messages. `MaxNumberOfMessages` is clamped to 1–10 and `WaitTimeSeconds` to 20 seconds, then passed to Service Bus as its maximum wait. A standard queue needs no session-accept step, so an empty queue returns within that wait. For each message, the adapter creates a receipt handle and records which receiver holds the lock. Delete and visibility changes use that same receiver.

Standard queues allow duplicates and provide best-effort ordering. `ApproximateReceiveCount` uses Service Bus's `delivery_count`, starting at 1 and increasing on each redelivery; this count also determines when a failing message is dead-lettered. The adapter recomputes MD5 checksums and reads `SentTimestamp` from the enqueue time. `DelaySeconds` schedules delivery up to 900 seconds; larger values return `InvalidParameterValue`. Batch sends process entries individually and return each entry's result, including separately scheduled delays.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjM2IiB2aWV3Qm94PSIwIDAgODM2IDIzNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpdmUgaXMgYSBQZWVrTG9jazogdGhlIHJlY2VpdmVyIGxvY2tzIHVwIHRvIHRlbiBtZXNzYWdlcyB3aXRoaW4gdGhlIGxvbmctcG9sbCB3YWl0OyBhbiBlbXB0eSBxdWV1ZSByZXR1cm5zIHdpdGhpbiB0aGUgcmVxdWVzdGVkIHdhaXQgd2l0aCBubyBzZXNzaW9uIGFjY2VwdCB0byBvdmVycnVuIGl0OyBlYWNoIGxvY2tlZCBtZXNzYWdlIGlzIHJlZ2lzdGVyZWQgYWdhaW5zdCBpdHMgb3duaW5nIHJlY2VpdmVyLiBUaGUgU2VydmljZSBCdXMgZGVsaXZlcnlfY291bnQgc3VyZmFjZXMgYXMgdGhlIHJlYWwgQXBwcm94aW1hdGVSZWNlaXZlQ291bnQsIGFuZCB0aGUgY29udHJhY3QgaXMgYXQtbGVhc3Qtb25jZSwgYmVzdC1lZmZvcnQgb3JkZXIsIG5vIGRlZHVwLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0iY2JyIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8Y2lyY2xlIGN4PSI0MCIgY3k9IjU4IiByPSIxMyIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSI2MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj4xPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iNDAiIHdpZHRoPSIzMDAiIGhlaWdodD0iNDgiIHJ4PSIxMCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI3NiIgeT0iNjAiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5SZWNlaXZlTWVzc2FnZSAobG9uZyBwb2xsKTwvdGV4dD4KPHRleHQgeD0iNzYiIHk9Ijc3IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+dXAgdG8gMTAgbWVzc2FnZXMgwrcgd2FpdCB1cCB0byAyMHM8L3RleHQ+CjxsaW5lIHgxPSIxODAiIHkxPSI4OCIgeDI9IjE4MCIgeTI9IjExMCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNjYnIpIi8+CjxjaXJjbGUgY3g9IjQwIiBjeT0iMTI2IiByPSIxMyIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+MjwvdGV4dD4KPHJlY3QgeD0iNjIiIHk9IjEwOCIgd2lkdGg9IjMwMCIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSIxMjgiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5QZWVrTG9jayByZWNlaXZlciDCtyBtYXgtd2FpdDwvdGV4dD4KPHRleHQgeD0iNzYiIHk9IjE0NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmVtcHR5IHF1ZXVlIHJldHVybnMgd2l0aGluIHlvdXIgd2FpdCwgPHRzcGFuIHN0eWxlPSJmaWxsOiMwNTk2NjkiPm5vIGFjY2VwdCBzdGVwPC90c3Bhbj48L3RleHQ+CjxsaW5lIHgxPSIxODAiIHkxPSIxNTYiIHgyPSIxODAiIHkyPSIxNzgiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjY2JyKSIvPgo8Y2lyY2xlIGN4PSI0MCIgY3k9IjE5NCIgcj0iMTMiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48dGV4dCB4PSI0MCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPjM8L3RleHQ+CjxyZWN0IHg9IjYyIiB5PSIxNzYiIHdpZHRoPSIzMDAiIGhlaWdodD0iNDgiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI3NiIgeT0iMTk2IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEyLjVweCI+TG9jayDCtyBtaW50IHJlY2VpcHQgaGFuZGxlIMK3IHJlZ2lzdGVyPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iMjEzIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5oZWxkIG9uIHRoZSBzYW1lIHJlY2VpdmVyIGxpbmsgYWNyb3NzIHJlY2VpdmXihpJkZWxldGU8L3RleHQ+CjxsaW5lIHgxPSIzODQiIHkxPSI0MCIgeDI9IjM4NCIgeTI9IjIyNCIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8cmVjdCB4PSI0MDQiIHk9IjUyIiB3aWR0aD0iNDA4IiBoZWlnaHQ9Ijg0IiByeD0iMTIiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4KPHRleHQgeD0iNjA4IiB5PSI4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMi41cHgiPkFwcHJveGltYXRlUmVjZWl2ZUNvdW50ID0gU2VydmljZSBCdXMgRGVsaXZlcnlDb3VudDwvdGV4dD4KPHRleHQgeD0iNjA4IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPmluY3JlYXNlcyBvbiByZWRlbGl2ZXJ5PC90ZXh0Pgo8dGV4dCB4PSI2MDgiIHk9IjEyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnN0YXJ0cyBhdCAxLCBjbGltYnMgb24gZWFjaCByZWRlbGl2ZXJ5PC90ZXh0Pgo8cmVjdCB4PSI0MDQiIHk9IjE1MCIgd2lkdGg9IjQwOCIgaGVpZ2h0PSI3NCIgcng9IjEyIiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjYwOCIgeT0iMTgwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPmF0LWxlYXN0LW9uY2UgwrcgYmVzdC1lZmZvcnQgb3JkZXI8L3RleHQ+Cjx0ZXh0IHg9IjYwOCIgeT0iMjAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+bm8gZGVkdXBsaWNhdGlvbiAoYSBGSUZPLW9ubHkgZmVhdHVyZSk8L3RleHQ+Cjx0ZXh0IHg9IjYwOCIgeT0iMjE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZmlsbDojOTRhM2I4Ij50aGUgU1FTIHN0YW5kYXJkLXF1ZXVlIGNvbnRyYWN0PC90ZXh0Pgo8L3N2Zz4=" alt="A receive is a PeekLock: the receiver locks up to ten messages within the long-poll wait; an empty queue returns within the requested wait with no session accept to overrun it; each locked message is registered against its owning receiver. The Service Bus delivery_count surfaces as the real ApproximateReceiveCount, and the contract is at-least-once, best-effort order, no dedup." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjM2IiB2aWV3Qm94PSIwIDAgODM2IDIzNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpdmUgaXMgYSBQZWVrTG9jazogdGhlIHJlY2VpdmVyIGxvY2tzIHVwIHRvIHRlbiBtZXNzYWdlcyB3aXRoaW4gdGhlIGxvbmctcG9sbCB3YWl0OyBhbiBlbXB0eSBxdWV1ZSByZXR1cm5zIHdpdGhpbiB0aGUgcmVxdWVzdGVkIHdhaXQgd2l0aCBubyBzZXNzaW9uIGFjY2VwdCB0byBvdmVycnVuIGl0OyBlYWNoIGxvY2tlZCBtZXNzYWdlIGlzIHJlZ2lzdGVyZWQgYWdhaW5zdCBpdHMgb3duaW5nIHJlY2VpdmVyLiBUaGUgU2VydmljZSBCdXMgZGVsaXZlcnlfY291bnQgc3VyZmFjZXMgYXMgdGhlIHJlYWwgQXBwcm94aW1hdGVSZWNlaXZlQ291bnQsIGFuZCB0aGUgY29udHJhY3QgaXMgYXQtbGVhc3Qtb25jZSwgYmVzdC1lZmZvcnQgb3JkZXIsIG5vIGRlZHVwLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0iY2JyIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8Y2lyY2xlIGN4PSI0MCIgY3k9IjU4IiByPSIxMyIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSI2MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj4xPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iNDAiIHdpZHRoPSIzMDAiIGhlaWdodD0iNDgiIHJ4PSIxMCIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI3NiIgeT0iNjAiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5SZWNlaXZlTWVzc2FnZSAobG9uZyBwb2xsKTwvdGV4dD4KPHRleHQgeD0iNzYiIHk9Ijc3IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+dXAgdG8gMTAgbWVzc2FnZXMgwrcgd2FpdCB1cCB0byAyMHM8L3RleHQ+CjxsaW5lIHgxPSIxODAiIHkxPSI4OCIgeDI9IjE4MCIgeTI9IjExMCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNjYnIpIi8+CjxjaXJjbGUgY3g9IjQwIiBjeT0iMTI2IiByPSIxMyIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+MjwvdGV4dD4KPHJlY3QgeD0iNjIiIHk9IjEwOCIgd2lkdGg9IjMwMCIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSIxMjgiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5QZWVrTG9jayByZWNlaXZlciDCtyBtYXgtd2FpdDwvdGV4dD4KPHRleHQgeD0iNzYiIHk9IjE0NSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmVtcHR5IHF1ZXVlIHJldHVybnMgd2l0aGluIHlvdXIgd2FpdCwgPHRzcGFuIHN0eWxlPSJmaWxsOiAjOTBkZWM2Ij5ubyBhY2NlcHQgc3RlcDwvdHNwYW4+PC90ZXh0Pgo8bGluZSB4MT0iMTgwIiB5MT0iMTU2IiB4Mj0iMTgwIiB5Mj0iMTc4IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2NicikiLz4KPGNpcmNsZSBjeD0iNDAiIGN5PSIxOTQiIHI9IjEzIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PHRleHQgeD0iNDAiIHk9IjE5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj4zPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iMTc2IiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjQ4IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzYiIHk9IjE5NiIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMi41cHgiPkxvY2sgwrcgbWludCByZWNlaXB0IGhhbmRsZSDCtyByZWdpc3RlcjwvdGV4dD4KPHRleHQgeD0iNzYiIHk9IjIxMyIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+aGVsZCBvbiB0aGUgc2FtZSByZWNlaXZlciBsaW5rIGFjcm9zcyByZWNlaXZl4oaSZGVsZXRlPC90ZXh0Pgo8bGluZSB4MT0iMzg0IiB5MT0iNDAiIHgyPSIzODQiIHkyPSIyMjQiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHJlY3QgeD0iNDA0IiB5PSI1MiIgd2lkdGg9IjQwOCIgaGVpZ2h0PSI4NCIgcng9IjEyIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjYwOCIgeT0iODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTIuNXB4Ij5BcHByb3hpbWF0ZVJlY2VpdmVDb3VudCA9IFNlcnZpY2UgQnVzIERlbGl2ZXJ5Q291bnQ8L3RleHQ+Cjx0ZXh0IHg9IjYwOCIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5pbmNyZWFzZXMgb24gcmVkZWxpdmVyeTwvdGV4dD4KPHRleHQgeD0iNjA4IiB5PSIxMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5zdGFydHMgYXQgMSwgY2xpbWJzIG9uIGVhY2ggcmVkZWxpdmVyeTwvdGV4dD4KPHJlY3QgeD0iNDA0IiB5PSIxNTAiIHdpZHRoPSI0MDgiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI2MDgiIHk9IjE4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5hdC1sZWFzdC1vbmNlIMK3IGJlc3QtZWZmb3J0IG9yZGVyPC90ZXh0Pgo8dGV4dCB4PSI2MDgiIHk9IjIwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPm5vIGRlZHVwbGljYXRpb24gKGEgRklGTy1vbmx5IGZlYXR1cmUpPC90ZXh0Pgo8dGV4dCB4PSI2MDgiIHk9IjIxOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICM5NGEzYjgiPnRoZSBTUVMgc3RhbmRhcmQtcXVldWUgY29udHJhY3Q8L3RleHQ+Cjwvc3ZnPg==" alt="A receive is a PeekLock: the receiver locks up to ten messages within the long-poll wait; an empty queue returns within the requested wait with no session accept to overrun it; each locked message is registered against its owning receiver. The Service Bus delivery_count surfaces as the real ApproximateReceiveCount, and the contract is at-least-once, best-effort order, no dedup." />
</div>

<p className="t9-caption">A receive is a PeekLock: the receiver locks up to ten messages within your long-poll wait, and the adapter assigns a receipt handle held on the same link. ApproximateReceiveCount is the real Service Bus delivery\_count .</p>

#### Receipt handles & visibility

A receipt handle has the form `sb1 | queue | lock-token`. The adapter records its Service Bus receiver because only that receiver can complete, abandon or renew the lock. This state is held between `ReceiveMessage` and a later delete or visibility change.

**Receipt handles expire on adapter restart.** Restarting drops the client, receivers and registry. A later delete or visibility change with an old handle returns `ReceiptHandleIsInvalid`. The message remains in Service Bus and becomes available again when its lock expires, within 5 minutes.

**A visibility request cannot exceed 5 minutes.** Larger values return `InvalidParameterValue` because Service Bus caps lock duration at 5 minutes. A positive `ChangeMessageVisibility` renews the lock; zero abandons the message for immediate redelivery. The background renewal loop maintains the lock during the requested window.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjA4IiB2aWV3Qm94PSIwIDAgODM2IDIwOCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgcmVjZWlwdCBoYW5kbGUgaXMgYSBsaXZlIFNlcnZpY2UgQnVzIFBlZWtMb2NrIGJvdW5kIHRvIHRoZSByZWNlaXZlciBsaW5rOyBhbiBhZGFwdGVyIHJlc3RhcnQgaW52YWxpZGF0ZXMgZXZlcnkgb3V0c3RhbmRpbmcgaGFuZGxlIGFuZCB0aGUgbWVzc2FnZSByZWRlbGl2ZXJzIGFmdGVyIGl0cyBsb2NrIGxhcHNlcywgcmVwb3J0ZWQgYXMgYW4gZXJyb3IsIG5vdCBzaWxlbnQuIFRoZSB2aXNpYmlsaXR5IHRpbWVvdXQgbWFwcyB0byB0aGUgUGVla0xvY2sgbG9jaywgd2hvc2UgY2VpbGluZyBpcyBTZXJ2aWNlIEJ1cydzIDUtbWludXRlIGxvY2sgY2FwOyBhIHJlcXVlc3QgYWJvdmUgNSBtaW51dGVzIGlzIHJlamVjdGVkIHdpdGggYW4gZXJyb3IgcmF0aGVyIHRoYW4gYmVpbmcgc2lsZW50bHkgY2xhbXBlZC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9ImNidiIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMDU5NjY5Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPHRleHQgeD0iMjYiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojYjQ1MzA5Ij5SRUNFSVBUIEhBTkRMRSA9IExJVkUgQlJPS0VSIExPQ0s8L3RleHQ+CjxyZWN0IHg9IjI2IiB5PSIzOCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIxNTIiIHJ4PSIxNCIgZmlsbD0iI2ZmZmJlYiIgc3Ryb2tlPSIjZmRlNjhhIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8cmVjdCB4PSI0NCIgeT0iNTgiIHdpZHRoPSIzMjQiIGhlaWdodD0iMzQiIHJ4PSI4IiBmaWxsPSIjZmZmIiBzdHJva2U9IiNmZGU2OGEiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjIwNiIgeT0iODAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiNiNDUzMDkiPnNiMTpvcmRlcnM6dG9rLTkxYTLigKY8L3RleHQ+Cjx0ZXh0IHg9IjIwNiIgeT0iMTEyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+cXVldWUgfCBTQiBsb2NrLXRva2VuLCBib3VuZCB0byB0aGUgcmVjZWl2ZXIgbGluazwvdGV4dD4KPGxpbmUgeDE9IjIwNiIgeTE9IjEyMCIgeDI9IjIwNiIgeTI9IjEzNiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjEuNiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAzIi8+Cjx0ZXh0IHg9IjIwNiIgeT0iMTQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmaWxsOiNiNDUzMDk7Zm9udC13ZWlnaHQ6NzAwIj4oYWRhcHRlciByZXN0YXJ0KTwvdGV4dD4KPHRleHQgeD0iMjA2IiB5PSIxNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiNiNDUzMDkiPmhhbmRsZSBpbnZhbGlkOyByZWRlbGl2ZXJzIGFmdGVyIHRoZSBsb2NrIGxhcHNlcyAo4omkIDUgbWluKTwvdGV4dD4KPHRleHQgeD0iMjA2IiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiM5NGEzYjgiPmFuIGVycm9yIChSZWNlaXB0SGFuZGxlSXNJbnZhbGlkKSwgbmV2ZXIgYSBzaWxlbnQgZHJvcDwvdGV4dD4KPGxpbmUgeDE9IjM5OCIgeTE9IjM0IiB4Mj0iMzk4IiB5Mj0iMTkyIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjQyNCIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiNiNDUzMDkiPlZJU0lCSUxJVFkgQ0FQUEVEIEFUIDUgTUlOPC90ZXh0Pgo8cmVjdCB4PSI0MjQiIHk9IjM4IiB3aWR0aD0iMzg2IiBoZWlnaHQ9IjE1MiIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxsaW5lIHgxPSI0NDYiIHkxPSIxMDYiIHgyPSI3MzQiIHkyPSIxMDYiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIyIi8+CjxyZWN0IHg9IjQ0NiIgeT0iOTAiIHdpZHRoPSI5MiIgaGVpZ2h0PSIxOCIgcng9IjQiIGZpbGw9IiNhN2YzZDAiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxyZWN0IHg9IjU0MiIgeT0iOTAiIHdpZHRoPSI5MiIgaGVpZ2h0PSIxOCIgcng9IjQiIGZpbGw9IiM2ZWU3YjciIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxyZWN0IHg9IjYzOCIgeT0iOTAiIHdpZHRoPSI5NiIgaGVpZ2h0PSIxOCIgcng9IjQiIGZpbGw9IiMxMGI5ODEiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3NDAiIHkxPSI3MiIgeDI9Ijc0MCIgeTI9IjEyNCIgc3Ryb2tlPSIjZGMyNjI2IiBzdHJva2Utd2lkdGg9IjIiLz4KPHRleHQgeD0iNzQ4IiB5PSI4OCIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGI7IGZpbGw6I2I5MWMxYyI+NSBtaW48L3RleHQ+Cjx0ZXh0IHg9Ijc0OCIgeT0iMTAyIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZmlsbDojYjkxYzFjIj5jYXA8L3RleHQ+Cjx0ZXh0IHg9IjQ5MiIgeT0iODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiIj5sb2NrPC90ZXh0Pgo8dGV4dCB4PSI1ODgiIHk9IjgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZmlsbDojMDU5NjY5Ij4rcmVuZXc8L3RleHQ+Cjx0ZXh0IHg9IjY4NiIgeT0iODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiMwNTk2NjkiPityZW5ldzwvdGV4dD4KPHRleHQgeD0iNjE3IiB5PSIxNDYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5DaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSByZW5ld3MgdGhlIGxvY2s7IDAgYWJhbmRvbnMg4oaSIHJlZGVsaXZlcjwvdGV4dD4KPHRleHQgeD0iNjE3IiB5PSIxNjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiNiNDUzMDkiPmFib3ZlIDUgbWluIOKGkiByZWplY3RlZCwgbmV2ZXIgY2xhbXBlZDwvdGV4dD4KPC9zdmc+" alt="The receipt handle is a live Service Bus PeekLock bound to the receiver link; an adapter restart invalidates every outstanding handle and the message redelivers after its lock lapses, reported as an error, not silent. The visibility timeout maps to the PeekLock lock, whose ceiling is Service Bus's 5-minute lock cap; a request above 5 minutes is rejected with an error rather than being silently clamped." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjA4IiB2aWV3Qm94PSIwIDAgODM2IDIwOCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgcmVjZWlwdCBoYW5kbGUgaXMgYSBsaXZlIFNlcnZpY2UgQnVzIFBlZWtMb2NrIGJvdW5kIHRvIHRoZSByZWNlaXZlciBsaW5rOyBhbiBhZGFwdGVyIHJlc3RhcnQgaW52YWxpZGF0ZXMgZXZlcnkgb3V0c3RhbmRpbmcgaGFuZGxlIGFuZCB0aGUgbWVzc2FnZSByZWRlbGl2ZXJzIGFmdGVyIGl0cyBsb2NrIGxhcHNlcywgcmVwb3J0ZWQgYXMgYW4gZXJyb3IsIG5vdCBzaWxlbnQuIFRoZSB2aXNpYmlsaXR5IHRpbWVvdXQgbWFwcyB0byB0aGUgUGVla0xvY2sgbG9jaywgd2hvc2UgY2VpbGluZyBpcyBTZXJ2aWNlIEJ1cydzIDUtbWludXRlIGxvY2sgY2FwOyBhIHJlcXVlc3QgYWJvdmUgNSBtaW51dGVzIGlzIHJlamVjdGVkIHdpdGggYW4gZXJyb3IgcmF0aGVyIHRoYW4gYmVpbmcgc2lsZW50bHkgY2xhbXBlZC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9ImNidiIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMjBmN2I0Ii8+PC9tYXJrZXI+CjwvZGVmcz4KPHRleHQgeD0iMjYiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogI2RlYjI5MCI+UkVDRUlQVCBIQU5ETEUgPSBMSVZFIEJST0tFUiBMT0NLPC90ZXh0Pgo8cmVjdCB4PSIyNiIgeT0iMzgiIHdpZHRoPSIzNjAiIGhlaWdodD0iMTUyIiByeD0iMTQiIGZpbGw9IiMzMTJkMWEiIHN0cm9rZT0iIzY2NWQzZCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHJlY3QgeD0iNDQiIHk9IjU4IiB3aWR0aD0iMzI0IiBoZWlnaHQ9IjM0IiByeD0iOCIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjNjY1ZDNkIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSIyMDYiIHk9IjgwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2RlYjI5MCI+c2IxOm9yZGVyczp0b2stOTFhMuKApjwvdGV4dD4KPHRleHQgeD0iMjA2IiB5PSIxMTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5xdWV1ZSB8IFNCIGxvY2stdG9rZW4sIGJvdW5kIHRvIHRoZSByZWNlaXZlciBsaW5rPC90ZXh0Pgo8bGluZSB4MT0iMjA2IiB5MT0iMTIwIiB4Mj0iMjA2IiB5Mj0iMTM2IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMS42IiBzdHJva2UtZGFzaGFycmF5PSIzIDMiLz4KPHRleHQgeD0iMjA2IiB5PSIxNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZpbGw6ICNkZWIyOTA7Zm9udC13ZWlnaHQ6NzAwIj4oYWRhcHRlciByZXN0YXJ0KTwvdGV4dD4KPHRleHQgeD0iMjA2IiB5PSIxNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGViMjkwIj5oYW5kbGUgaW52YWxpZDsgcmVkZWxpdmVycyBhZnRlciB0aGUgbG9jayBsYXBzZXMgKOKJpCA1IG1pbik8L3RleHQ+Cjx0ZXh0IHg9IjIwNiIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzk0YTNiOCI+YW4gZXJyb3IgKFJlY2VpcHRIYW5kbGVJc0ludmFsaWQpLCBuZXZlciBhIHNpbGVudCBkcm9wPC90ZXh0Pgo8bGluZSB4MT0iMzk4IiB5MT0iMzQiIHgyPSIzOTgiIHkyPSIxOTIiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNDI0IiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICNkZWIyOTAiPlZJU0lCSUxJVFkgQ0FQUEVEIEFUIDUgTUlOPC90ZXh0Pgo8cmVjdCB4PSI0MjQiIHk9IjM4IiB3aWR0aD0iMzg2IiBoZWlnaHQ9IjE1MiIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxsaW5lIHgxPSI0NDYiIHkxPSIxMDYiIHgyPSI3MzQiIHkyPSIxMDYiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIyIi8+CjxyZWN0IHg9IjQ0NiIgeT0iOTAiIHdpZHRoPSI5MiIgaGVpZ2h0PSIxOCIgcng9IjQiIGZpbGw9IiMxYTMxMjciIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxyZWN0IHg9IjU0MiIgeT0iOTAiIHdpZHRoPSI5MiIgaGVpZ2h0PSIxOCIgcng9IjQiIGZpbGw9IiMxYTMxMjgiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxyZWN0IHg9IjYzOCIgeT0iOTAiIHdpZHRoPSI5NiIgaGVpZ2h0PSIxOCIgcng9IjQiIGZpbGw9IiMxMGI5ODEiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3NDAiIHkxPSI3MiIgeDI9Ijc0MCIgeTI9IjEyNCIgc3Ryb2tlPSIjZGMyNjI2IiBzdHJva2Utd2lkdGg9IjIiLz4KPHRleHQgeD0iNzQ4IiB5PSI4OCIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNkZTkwOTAiPjUgbWluPC90ZXh0Pgo8dGV4dCB4PSI3NDgiIHk9IjEwMiIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNkZTkwOTAiPmNhcDwvdGV4dD4KPHRleHQgeD0iNDkyIiB5PSI4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDgiPmxvY2s8L3RleHQ+Cjx0ZXh0IHg9IjU4OCIgeT0iODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBkZWM2Ij4rcmVuZXc8L3RleHQ+Cjx0ZXh0IHg9IjY4NiIgeT0iODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBkZWM2Ij4rcmVuZXc8L3RleHQ+Cjx0ZXh0IHg9IjYxNyIgeT0iMTQ2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHkgcmVuZXdzIHRoZSBsb2NrOyAwIGFiYW5kb25zIOKGkiByZWRlbGl2ZXI8L3RleHQ+Cjx0ZXh0IHg9IjYxNyIgeT0iMTY2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2RlYjI5MCI+YWJvdmUgNSBtaW4g4oaSIHJlamVjdGVkLCBuZXZlciBjbGFtcGVkPC90ZXh0Pgo8L3N2Zz4=" alt="The receipt handle is a live Service Bus PeekLock bound to the receiver link; an adapter restart invalidates every outstanding handle and the message redelivers after its lock lapses, reported as an error, not silent. The visibility timeout maps to the PeekLock lock, whose ceiling is Service Bus's 5-minute lock cap; a request above 5 minutes is rejected with an error rather than being silently clamped." />
</div>

<p className="t9-caption">Receipt handles depend on the live Service Bus receiver and become invalid after an adapter restart. A requested visibility timeout above 5 minutes returns an error.</p>

#### Dead-letter & retention

Service Bus dead-letters a message when its delivery count reaches the queue's limit, set from `maxReceiveCount`. Because the adapter cannot receive from Service Bus's internal dead-letter subqueue, Terraform configures automatic forwarding to your declared dead-letter queue (DLQ). Expired messages are also dead-lettered and remain available there for inspection or recovery.

Terraform configures retention, lock duration and dead-letter forwarding through Azure Resource Manager (ARM) when creating the queue. The native messaging role cannot read Azure Resource Manager settings. The Max adapter answers configuration reads from its declared queue catalog; live message counts remain unavailable from this transport. Broker messages are durable, while receiver links, active locks and receipt-handle mappings belong to the adapter process.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjI2IiB2aWV3Qm94PSIwIDAgODM2IDIyNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJEZWFkLWxldHRlciBpcyBicm9rZXItbmF0aXZlOiBhIHBvaXNvbiBtZXNzYWdlIHdob3NlIGRlbGl2ZXJ5IGNvdW50IHJlYWNoZXMgdGhlIHJlZGVsaXZlcnkgbGltaXQgaXMgZGVhZC1sZXR0ZXJlZCBieSB0aGUgYnJva2VyIGFuZCBhdXRvLWZvcndhcmRlZCB0byB0aGUgRExRIGVudGl0eSB0aGUgY29tcGlsZXIgZGVjbGFyZWQuIFJldGVudGlvbiBhbmQgdGhlIGVudGl0eSBjb25maWcgYXJlIGNvbnRyb2wtcGxhbmUsIHNldCBhdCBhcHBseS10aW1lIHZpYSBBUk07IG5hdGl2ZSBBTVFQIGNhbm5vdCByZWFkIHRoZXNlIHNldHRpbmdzLiBUaGUgTWF4IHF1ZXVlIGNhdGFsb2cgYW5zd2VycyBkZWNsYXJlZCBjb25maWd1cmF0aW9uIHJlYWRzOyBsaXZlIGNvdW50cyByZW1haW4gdW5hdmFpbGFibGUuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJjYmQiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8L2RlZnM+Cjx0ZXh0IHg9IjI0IiB5PSIyOCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6Izk0YTNiOCI+REVBRC1MRVRURVIgwrcgQlJPS0VSLU5BVElWRTwvdGV4dD4KPHJlY3QgeD0iMjQiIHk9IjM4IiB3aWR0aD0iMTkyIiBoZWlnaHQ9Ijk4IiByeD0iMTIiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4KPHJlY3QgeD0iNDAiIHk9IjU2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iOCIgZmlsbD0iI2ZmZmJlYiIgc3Ryb2tlPSIjZmRlNjhhIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIxMjAiIHk9Ijc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDo2MDAgMTEuNXB4IEludGVyLHNhbnMtc2VyaWY7ZmlsbDojYjQ1MzA5Ij5mYWlsZWQgbWVzc2FnZTwvdGV4dD4KPHRleHQgeD0iNDAiIHk9IjExMiIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6I2I0NTMwOSI+ZGVsaXZlcnkgY291bnQg4omlIGxpbWl0PC90ZXh0Pgo8dGV4dCB4PSI0MCIgeT0iMTI4IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+TiBkZWxpdmVyaWVzLCB0aGVuIGRlYWQtbGV0dGVyPC90ZXh0Pgo8bGluZSB4MT0iMjE2IiB5MT0iODYiIHgyPSIyNjIiIHkyPSI4NiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjY2JkKSIvPgo8cmVjdCB4PSIyNjYiIHk9IjUwIiB3aWR0aD0iMTY2IiBoZWlnaHQ9IjcyIiByeD0iMTEiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iMzQ5IiB5PSI3NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzMzNDE1NSI+YnJva2VyIGRlYWQtbGV0dGVyczwvdGV4dD4KPHRleHQgeD0iMzQ5IiB5PSI5NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmFmdGVyIHRoZSByZWRlbGl2ZXJ5IGxpbWl0PC90ZXh0Pgo8dGV4dCB4PSIzNDkiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmV4cGlyeSBkZWFkLWxldHRlcnMgdG9vPC90ZXh0Pgo8bGluZSB4MT0iNDMyIiB5MT0iODYiIHgyPSI0NzgiIHkyPSI4NiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjY2JkKSIvPgo8dGV4dCB4PSI0NTUiIHk9Ijc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YiI+Zm9yd2FyZDwvdGV4dD4KPHJlY3QgeD0iNDgyIiB5PSIzOCIgd2lkdGg9IjMzMCIgaGVpZ2h0PSI5OCIgcng9IjEzIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjY0NyIgeT0iNzIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+eW91ciBkZWNsYXJlZCBETFEgZW50aXR5PC90ZXh0Pgo8dGV4dCB4PSI2NDciIHk9Ijk2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5hdXRvLWZvcndhcmRzIHRvIHlvdXIgRExRPC90ZXh0Pgo8dGV4dCB4PSI2NDciIHk9IjExOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+bWF4UmVjZWl2ZUNvdW50IOKGkiByZWRlbGl2ZXJ5IGxpbWl0PC90ZXh0Pgo8cmVjdCB4PSIyNCIgeT0iMTUwIiB3aWR0aD0iNzg4IiBoZWlnaHQ9IjYwIiByeD0iMTIiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNDAiIHk9IjE3MiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6Izk0YTNiOCI+UkVURU5USU9OICsgRU5USVRZIENPTkZJRyA9IENPTlRST0wgUExBTkU8L3RleHQ+Cjx0ZXh0IHg9IjQwIiB5PSIxOTAiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5yZXRlbnRpb24sIGxvY2sgZHVyYXRpb24sIGFuZCB0aGUgRExRIGFyZSBzZXQgYXQgYXBwbHktdGltZSAoQVJNKS4gVGhlIGtleWxlc3MgZGF0YSBwbGFuZSBjYW5ub3QgcmVhZCB0aGVtOjwvdGV4dD4KPHRleHQgeD0iNDAiIHk9IjIwNSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPk1heCByZWFkcyBkZWNsYXJlZCBzZXR0aW5ncyBmcm9tIGl0cyBjYXRhbG9nOyBuYXRpdmUgQU1RUCBzdXBwbGllcyBubyBsaXZlIG1lc3NhZ2UgY291bnRzLjwvdGV4dD4KPC9zdmc+" alt="Dead-letter is broker-native: a poison message whose delivery count reaches the redelivery limit is dead-lettered by the broker and auto-forwarded to the DLQ entity the compiler declared. Retention and the entity config are control-plane, set at apply-time via ARM; native AMQP cannot read these settings. The Max queue catalog answers declared configuration reads; live counts remain unavailable." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjI2IiB2aWV3Qm94PSIwIDAgODM2IDIyNiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJEZWFkLWxldHRlciBpcyBicm9rZXItbmF0aXZlOiBhIHBvaXNvbiBtZXNzYWdlIHdob3NlIGRlbGl2ZXJ5IGNvdW50IHJlYWNoZXMgdGhlIHJlZGVsaXZlcnkgbGltaXQgaXMgZGVhZC1sZXR0ZXJlZCBieSB0aGUgYnJva2VyIGFuZCBhdXRvLWZvcndhcmRlZCB0byB0aGUgRExRIGVudGl0eSB0aGUgY29tcGlsZXIgZGVjbGFyZWQuIFJldGVudGlvbiBhbmQgdGhlIGVudGl0eSBjb25maWcgYXJlIGNvbnRyb2wtcGxhbmUsIHNldCBhdCBhcHBseS10aW1lIHZpYSBBUk07IG5hdGl2ZSBBTVFQIGNhbm5vdCByZWFkIHRoZXNlIHNldHRpbmdzLiBUaGUgTWF4IHF1ZXVlIGNhdGFsb2cgYW5zd2VycyBkZWNsYXJlZCBjb25maWd1cmF0aW9uIHJlYWRzOyBsaXZlIGNvdW50cyByZW1haW4gdW5hdmFpbGFibGUuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJjYmQiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8L2RlZnM+Cjx0ZXh0IHg9IjI0IiB5PSIyOCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5NGEzYjgiPkRFQUQtTEVUVEVSIMK3IEJST0tFUi1OQVRJVkU8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIzOCIgd2lkdGg9IjE5MiIgaGVpZ2h0PSI5OCIgcng9IjEyIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS42Ii8+CjxyZWN0IHg9IjQwIiB5PSI1NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjgiIGZpbGw9IiMzMTJkMWEiIHN0cm9rZT0iIzY2NWQzZCIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iMTIwIiB5PSI3OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6NjAwIDExLjVweCBJbnRlcixzYW5zLXNlcmlmO2ZpbGw6ICNkZWIyOTAiPmZhaWxlZCBtZXNzYWdlPC90ZXh0Pgo8dGV4dCB4PSI0MCIgeT0iMTEyIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogI2RlYjI5MCI+ZGVsaXZlcnkgY291bnQg4omlIGxpbWl0PC90ZXh0Pgo8dGV4dCB4PSI0MCIgeT0iMTI4IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+TiBkZWxpdmVyaWVzLCB0aGVuIGRlYWQtbGV0dGVyPC90ZXh0Pgo8bGluZSB4MT0iMjE2IiB5MT0iODYiIHgyPSIyNjIiIHkyPSI4NiIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjY2JkKSIvPgo8cmVjdCB4PSIyNjYiIHk9IjUwIiB3aWR0aD0iMTY2IiBoZWlnaHQ9IjcyIiByeD0iMTEiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iMzQ5IiB5PSI3NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNjOWNmZDgiPmJyb2tlciBkZWFkLWxldHRlcnM8L3RleHQ+Cjx0ZXh0IHg9IjM0OSIgeT0iOTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5hZnRlciB0aGUgcmVkZWxpdmVyeSBsaW1pdDwvdGV4dD4KPHRleHQgeD0iMzQ5IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5leHBpcnkgZGVhZC1sZXR0ZXJzIHRvbzwvdGV4dD4KPGxpbmUgeDE9IjQzMiIgeTE9Ijg2IiB4Mj0iNDc4IiB5Mj0iODYiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2NiZCkiLz4KPHRleHQgeD0iNDU1IiB5PSI3OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDgiPmZvcndhcmQ8L3RleHQ+CjxyZWN0IHg9IjQ4MiIgeT0iMzgiIHdpZHRoPSIzMzAiIGhlaWdodD0iOTgiIHJ4PSIxMyIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI2NDciIHk9IjcyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPnlvdXIgZGVjbGFyZWQgRExRIGVudGl0eTwvdGV4dD4KPHRleHQgeD0iNjQ3IiB5PSI5NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+YXV0by1mb3J3YXJkcyB0byB5b3VyIERMUTwvdGV4dD4KPHRleHQgeD0iNjQ3IiB5PSIxMTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPm1heFJlY2VpdmVDb3VudCDihpIgcmVkZWxpdmVyeSBsaW1pdDwvdGV4dD4KPHJlY3QgeD0iMjQiIHk9IjE1MCIgd2lkdGg9Ijc4OCIgaGVpZ2h0PSI2MCIgcng9IjEyIiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjQwIiB5PSIxNzIiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTRhM2I4Ij5SRVRFTlRJT04gKyBFTlRJVFkgQ09ORklHID0gQ09OVFJPTCBQTEFORTwvdGV4dD4KPHRleHQgeD0iNDAiIHk9IjE5MCIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnJldGVudGlvbiwgbG9jayBkdXJhdGlvbiwgYW5kIHRoZSBETFEgYXJlIHNldCBhdCBhcHBseS10aW1lIChBUk0pLiBUaGUga2V5bGVzcyBkYXRhIHBsYW5lIGNhbm5vdCByZWFkIHRoZW06PC90ZXh0Pgo8dGV4dCB4PSI0MCIgeT0iMjA1IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+TWF4IHJlYWRzIGRlY2xhcmVkIHNldHRpbmdzIGZyb20gaXRzIGNhdGFsb2c7IG5hdGl2ZSBBTVFQIHN1cHBsaWVzIG5vIGxpdmUgbWVzc2FnZSBjb3VudHMuPC90ZXh0Pgo8L3N2Zz4=" alt="Dead-letter is broker-native: a poison message whose delivery count reaches the redelivery limit is dead-lettered by the broker and auto-forwarded to the DLQ entity the compiler declared. Retention and the entity config are control-plane, set at apply-time via ARM; native AMQP cannot read these settings. The Max queue catalog answers declared configuration reads; live counts remain unavailable." />
</div>

<p className="t9-caption">Service Bus forwards failed messages to your declared DLQ after maxReceiveCount deliveries. Terraform configures retention and queue settings; runtime message permissions do not allow the adapter to read them.</p>

#### Limitations

△ Where SQS (standard) and Service Bus diverge, read before you adopt

* **The visibility timeout is capped at 5 minutes.** A visibility timeout maps to the PeekLock lock, whose ceiling is Service Bus's 5-minute lock-duration cap; a requested value above 5 minutes is rejected with an error ( InvalidParameterValue ) rather than being silently clamped (a clamp would risk double-processing before your window elapsed). Extension via ChangeMessageVisibility renews the lock, so long-held work is supported by re-extending, not by one long timeout.
* **Receipt handles expire on adapter restart.** A later delete or visibility change returns `ReceiptHandleIsInvalid`. The message becomes available again after its Service Bus lock expires, within 5 minutes. Cosmos DB and PostgreSQL handles differ: those handles remain usable after an adapter restart.
* **At-least-once, best-effort order, and no deduplication.** This is the SQS standard-queue contract: order is not guaranteed and duplicates are possible, and there is deliberately no dedup. Strict per-group order and duplicate detection are the FIFO contract: declare a `.fifo` queue, which is served on Service Bus sessions by a separate path (documented in the FIFO explainer).
* **Live counts are unavailable through the messaging transport.** The Max queue catalog supplies declared retention, visibility and DLQ configuration. `ApproximateNumberOfMessages` is omitted; use Azure monitoring for live queue counts and requests.
* **Separate logical queue management from broker provisioning.** The Max catalog handles queue listings, tags and supported attribute edits. Creating a logical queue checks that its provisioned Service Bus entity is reachable; deleting the logical queue does not delete that entity. Explicit retention changes, nonzero queue delay and new dead-letter routes require broker configuration and are rejected by the messaging backend.
* **PurgeQueue is bounded and racy.** A purge is a bounded receive-and-complete drain loop; a concurrent producer can enqueue mid-drain and only currently visible messages are drained. This differs from native SQS PurgeQueue , which also removes in-flight messages.

Use Azure monitoring to measure latency and throughput for your workload; this adaptation does not promise specific performance numbers.

#### Other considerations

* **Nothing in flight migrates.** The Service Bus namespace and its queues come up empty at deploy time, so messages still sitting in an SQS queue on AWS are not moved across; cut over at a drain point, or dual-write until the SQS side is drained.
* **Microsoft operates Service Bus; Tensor9 operates the adapter.** Microsoft manages queue durability, replication and availability. Include the adapter in your application's operational monitoring.
* **Check visibility and restart handling before cutover.** Consumers must account for the 5-minute visibility limit and receipt handles becoming invalid after an adapter restart. Uncompleted messages remain in Service Bus and can be delivered again after their locks expire; message retention and dead-letter policies still apply.
* **Estimate Service Bus costs from operations and capacity.** Standard bills per messaging operation; Premium bills per provisioned messaging unit. Include receives, renewals and deletes in the estimate.

### Via Azure Cosmos DB (queue)

| Operation                                             | Area           | Support   | Depth        | Notes                                                                                                                                                                                               |
| ----------------------------------------------------- | -------------- | --------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Dead-letter redrive                                   | Dead-letter    | Supported | Most usage   | at claim time a message past maxReceiveCount moves to the declared DLQ queue via a retried copy-then-delete move; a retry can produce a duplicate in the DLQ                                        |
| CreateQueue / DeleteQueue / SetQueueAttributes / tags | Queues         | Partial   | Full surface | Max manages logical queues on provisioned containers, tags and supported defaults. Terraform owns the account, database and containers; nonzero queue delay and new dead-letter routes are rejected |
| GetQueueAttributes (approximate counts)               | Queues         | Partial   | Full surface | approximate depth, cached \~5 s; can briefly include documents awaiting TTL expiry                                                                                                                  |
| ListQueues                                            | Queues         | Supported | Full surface | exact: the declared queue set                                                                                                                                                                       |
| DelaySeconds                                          | Send / receive | Supported | Common       | per-message delay ranges from zero to a maximum of 900 seconds; larger values return InvalidParameterValue                                                                                          |
| DeleteMessage                                         | Send / receive | Supported | Common       | deletes by receipt handle, which is stateless, so a stale handle no-ops just as SQS does                                                                                                            |
| ReceiveMessage                                        | Send / receive | Supported | Common       | messages are claimed in arrival order, giving best-effort order and at-least-once without a fairness guarantee; ApproximateReceiveCount is the message's real receive count                         |
| SendMessage                                           | Send / receive | Supported | Common       | each message is a Cosmos document; MD5 checksums recomputed for your SDK                                                                                                                            |
| SendMessageBatch                                      | Send / receive | Supported | Common       | per-entry writes with a result for each entry                                                                                                                                                       |
| ChangeMessageVisibility                               | Visibility     | Supported | Common       | extends the message's visibility with no cap (there is no broker lock ceiling); a stale handle is rejected rather than silently succeeding                                                          |

#### How it works

Tensor9 adds an adapter, a proxy process, to your application pod and sets `AWS_ENDPOINT_URL_SQS` to its loopback address. Your application keeps its `SendMessage` and `ReceiveMessage` calls. The adapter implements them using Cosmos DB and returns SQS responses, error codes and MD5 checksums.

Each queue has a Cosmos DB container, with one document per message. The adapter uses these documents for sending, receiving, deletion, delay, visibility, dead-letter delivery and counts. Standard queues claim messages in arrival order, with best-effort ordering under concurrent traffic.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24ncyBTUVMgU0RLIGNhbGxzIEFtYXpvbiBTUVMuIEFmdGVyOiBpbiB0aGUgdGFyZ2V0IGNsb3VkIHRoZSBzYW1lIGFwcGxpY2F0aW9uIGFuZCBTREsgY2FsbCBhIFRlbnNvcjkgYWRhcHRlciwgd2hpY2ggc2VydmVzIHRoZSBTUVMgQVBJIGZyb20gQXp1cmUgQ29zbW9zIERCLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0iYWgxIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDYiIHdpZHRoPSIzNTgiIGhlaWdodD0iMTE4IiByeD0iMTQiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiM5NGEzYjgiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9IjgwIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iOTAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMi41cHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI5MCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+U1FTIFNESzwvdGV4dD4KPGxpbmUgeDE9IjE1MCIgeTE9IjExMyIgeDI9IjIxMCIgeTI9IjExMyIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjYWgxKSIvPgo8dGV4dCB4PSIxODEiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZTo4LjVweCI+U1FTIEFQSTwvdGV4dD4KPHJlY3QgeD0iMjE0IiB5PSI4MCIgd2lkdGg9IjE0OCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI4OCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPkFtYXpvbiBTUVM8L3RleHQ+Cjx0ZXh0IHg9IjI4OCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+QVdTLW1hbmFnZWQ8L3RleHQ+CjxsaW5lIHgxPSI0MTgiIHkxPSI0MCIgeDI9IjQxOCIgeTI9IjE2MCIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8cmVjdCB4PSI0NjIiIHk9IjQ2IiB3aWR0aD0iMzYyIiBoZWlnaHQ9IjExOCIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iNDc2IiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+T04gVEhFIFRBUkdFVCBDTE9VRDwvdGV4dD4KPHJlY3QgeD0iNDc0IiB5PSI4MCIgd2lkdGg9IjkyIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNTIwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjUyMCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNTk2NjkiPnNhbWUgU0RLPC90ZXh0Pgo8bGluZSB4MT0iNTY2IiB5MT0iMTEzIiB4Mj0iNTkwIiB5Mj0iMTEzIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhaDEpIi8+CjxyZWN0IHg9IjU5NCIgeT0iNzYiIHdpZHRoPSIxMTAiIGhlaWdodD0iNzQiIHJ4PSIxMSIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI2NDkiIHk9IjEwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMnB4Ij5UZW5zb3I5PC90ZXh0Pgo8dGV4dCB4PSI2NDkiIHk9IjExNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+c2VydmljZTwvdGV4dD4KPHRleHQgeD0iNjQ5IiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPmFkYXB0ZXI8L3RleHQ+CjxsaW5lIHgxPSI3MDQiIHkxPSIxMTMiIHgyPSI3MjgiIHkyPSIxMTMiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2FoMSkiLz4KPHJlY3QgeD0iNzMyIiB5PSI4MCIgd2lkdGg9Ijg0IiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzc0IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTFweCI+Q29zbW9zIERCPC90ZXh0Pgo8dGV4dCB4PSI3NzQiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPkNvcmUgU1FMPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS the application's SQS SDK calls Amazon SQS. After: in the target cloud the same application and SDK call a Tensor9 adapter, which serves the SQS API from Azure Cosmos DB." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24ncyBTUVMgU0RLIGNhbGxzIEFtYXpvbiBTUVMuIEFmdGVyOiBpbiB0aGUgdGFyZ2V0IGNsb3VkIHRoZSBzYW1lIGFwcGxpY2F0aW9uIGFuZCBTREsgY2FsbCBhIFRlbnNvcjkgYWRhcHRlciwgd2hpY2ggc2VydmVzIHRoZSBTUVMgQVBJIGZyb20gQXp1cmUgQ29zbW9zIERCLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0iYWgxIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDYiIHdpZHRoPSIzNTgiIGhlaWdodD0iMTE4IiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI4MCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjkwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iOTAiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPlNRUyBTREs8L3RleHQ+CjxsaW5lIHgxPSIxNTAiIHkxPSIxMTMiIHgyPSIyMTAiIHkyPSIxMTMiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2FoMSkiLz4KPHRleHQgeD0iMTgxIiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmb250LXNpemU6OC41cHgiPlNRUyBBUEk8L3RleHQ+CjxyZWN0IHg9IjIxNCIgeT0iODAiIHdpZHRoPSIxNDgiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyODgiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5BbWF6b24gU1FTPC90ZXh0Pgo8dGV4dCB4PSIyODgiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkFXUy1tYW5hZ2VkPC90ZXh0Pgo8bGluZSB4MT0iNDE4IiB5MT0iNDAiIHgyPSI0MTgiIHkyPSIxNjAiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHJlY3QgeD0iNDYyIiB5PSI0NiIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMTgiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5PTiBUSEUgVEFSR0VUIENMT1VEPC90ZXh0Pgo8cmVjdCB4PSI0NzQiIHk9IjgwIiB3aWR0aD0iOTIiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI1MjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iNTIwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjNiI+c2FtZSBTREs8L3RleHQ+CjxsaW5lIHgxPSI1NjYiIHkxPSIxMTMiIHgyPSI1OTAiIHkyPSIxMTMiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2FoMSkiLz4KPHJlY3QgeD0iNTk0IiB5PSI3NiIgd2lkdGg9IjExMCIgaGVpZ2h0PSI3NCIgcng9IjExIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjY0OSIgeT0iMTAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPlRlbnNvcjk8L3RleHQ+Cjx0ZXh0IHg9IjY0OSIgeT0iMTE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5zZXJ2aWNlPC90ZXh0Pgo8dGV4dCB4PSI2NDkiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+YWRhcHRlcjwvdGV4dD4KPGxpbmUgeDE9IjcwNCIgeTE9IjExMyIgeDI9IjcyOCIgeTI9IjExMyIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjYWgxKSIvPgo8cmVjdCB4PSI3MzIiIHk9IjgwIiB3aWR0aD0iODQiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI3NzQiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMXB4Ij5Db3Ntb3MgREI8L3RleHQ+Cjx0ZXh0IHg9Ijc3NCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+Q29yZSBTUUw8L3RleHQ+Cjwvc3ZnPg==" alt="Before: on AWS the application's SQS SDK calls Amazon SQS. After: in the target cloud the same application and SDK call a Tensor9 adapter, which serves the SQS API from Azure Cosmos DB." />
</div>

<p className="t9-caption">The application keeps its SQS SDK. The adapter stores and reads messages in Azure Cosmos DB.</p>

#### Architecture

The Rust adapter stores durable state in Cosmos DB, so instances can restart or scale out without sharing an in-memory lock table. It authenticates through the customer's AKS Workload Identity without a static secret. Microsoft operates Cosmos DB's durability, backups and high availability; Tensor9 operates the adapter.

On the Cosmos side, the compiler provisions one serverless Cosmos account and one database per appliance , and inside it **one container per declared queue** (the container id is the queue name). Every message is a document that holds the SQS body, its attributes, its receive count, and a visibility timestamp. A **Standard** queue stores its messages durably and claims eligible messages in arrival order. Concurrent claims do not establish a fairness or no-starvation guarantee. Retention rides Cosmos's **native per-item TTL**, so an expired message is reclaimed by Cosmos itself.

* **Cosmos DB coordinates message claims.** Adapter instances share message and claim records in the database, so an adapter restart does not erase them.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjUwIiB2aWV3Qm94PSIwIDAgODM2IDI1MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgYWRhcHRlciBzZXJ2ZXMgU1FTIHJlcXVlc3RzIHVzaW5nIEF6dXJlIENvc21vcyBEQi4gT25lIHNlcnZlcmxlc3MgYWNjb3VudCBhbmQgZGF0YWJhc2UgaG9sZCBvbmUgY29udGFpbmVyIHBlciBkZWNsYXJlZCBxdWV1ZS4gQ29zbW9zIHN0b3JlcyBtZXNzYWdlcyBhbmQgY29vcmRpbmF0ZXMgY2xhaW1zLiBTdGFuZGFyZCBxdWV1ZXMgY2xhaW0gZWxpZ2libGUgbWVzc2FnZXMgd2l0aCBhdC1sZWFzdC1vbmNlIGRlbGl2ZXJ5IGFuZCBiZXN0LWVmZm9ydCBvcmRlcmluZy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InFhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8cmVjdCB4PSI4IiB5PSIzNCIgd2lkdGg9IjgyMCIgaGVpZ2h0PSIyMDAiIHJ4PSIxNiIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjI2IiB5PSI1NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjgiPkNVU1RPTUVSJ1MgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxMTgiIHdpZHRoPSI5NiIgaGVpZ2h0PSI3NiIgcng9IjEyIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjcyIiB5PSIxNTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjcyIiB5PSIxNjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5TUVMgU0RLPC90ZXh0Pgo8dGV4dCB4PSI3MiIgeT0iMTg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNTk2NjkiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjEyMCIgeTE9IjE1NiIgeDI9IjE1MiIgeTI9IjE1NiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcWEpIi8+CjxyZWN0IHg9IjE1NCIgeT0iMTI2IiB3aWR0aD0iMTQwIiBoZWlnaHQ9IjYwIiByeD0iMTIiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMjI0IiB5PSIxNTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTNweCI+VGVuc29yOSBsYXllcjwvdGV4dD4KPHRleHQgeD0iMjI0IiB5PSIxNzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPnN0YXRlIGluIENvc21vcyBEQjwvdGV4dD4KPGxpbmUgeDE9IjI5NiIgeTE9IjE1NiIgeDI9IjM2MCIgeTI9IjE1NiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcWEpIi8+Cjx0ZXh0IHg9IjMyOCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YiI+Q29zbW9zIFNRTDwvdGV4dD4KPHRleHQgeD0iMzI4IiB5PSIxNjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiIj5rZXlsZXNzPC90ZXh0Pgo8cmVjdCB4PSIzNjQiIHk9IjcwIiB3aWR0aD0iNDU2IiBoZWlnaHQ9IjE1NiIgcng9IjEzIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjU5MSIgeT0iOTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5BenVyZSBDb3Ntb3MgREI8L3RleHQ+Cjx0ZXh0IHg9IjU5MSIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDoxMHB4ICdTRiBNb25vJyxNZW5sbyxtb25vc3BhY2U7ZmlsbDojNjQ3NDhiIj5vbmUgc2VydmVybGVzcyBhY2NvdW50IMK3IGRhdGFiYXNlIHBlciBhcHBsaWFuY2U8L3RleHQ+CjxyZWN0IHg9IjM4MCIgeT0iMTI0IiB3aWR0aD0iMjA2IiBoZWlnaHQ9IjkwIiByeD0iMTAiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNDgzIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMDtmaWxsOiM0NzU1NjkiPm1lc3NhZ2UgZG9jdW1lbnRzPC90ZXh0Pgo8dGV4dCB4PSI0ODMiIHk9IjE3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmJvZHkgwrcgYXR0cmlidXRlcyDCtyByZWNlaXZlIGNvdW50PC90ZXh0Pgo8dGV4dCB4PSI0ODMiIHk9IjE5MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnJldGVudGlvbiBleHBpcmVzIG1lc3NhZ2VzPC90ZXh0Pgo8cmVjdCB4PSI1OTgiIHk9IjEyNCIgd2lkdGg9IjIwNiIgaGVpZ2h0PSI5MCIgcng9IjEwIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjcwMSIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPnJlY2VpdmUgY2xhaW1zPC90ZXh0Pgo8dGV4dCB4PSI3MDEiIHk9IjE3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+Y29uZGl0aW9uYWwgd3JpdGVzIGNob29zZSBvd25lcjwvdGV4dD4KPHRleHQgeD0iNzAxIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPnZpc2liaWxpdHkgZXhwaXJ5IGFsbG93cyByZWRlbGl2ZXJ5PC90ZXh0Pgo8L3N2Zz4=" alt="The adapter serves SQS requests using Azure Cosmos DB. One serverless account and database hold one container per declared queue. Cosmos stores messages and coordinates claims. Standard queues claim eligible messages with at-least-once delivery and best-effort ordering." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjUwIiB2aWV3Qm94PSIwIDAgODM2IDI1MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgYWRhcHRlciBzZXJ2ZXMgU1FTIHJlcXVlc3RzIHVzaW5nIEF6dXJlIENvc21vcyBEQi4gT25lIHNlcnZlcmxlc3MgYWNjb3VudCBhbmQgZGF0YWJhc2UgaG9sZCBvbmUgY29udGFpbmVyIHBlciBkZWNsYXJlZCBxdWV1ZS4gQ29zbW9zIHN0b3JlcyBtZXNzYWdlcyBhbmQgY29vcmRpbmF0ZXMgY2xhaW1zLiBTdGFuZGFyZCBxdWV1ZXMgY2xhaW0gZWxpZ2libGUgbWVzc2FnZXMgd2l0aCBhdC1sZWFzdC1vbmNlIGRlbGl2ZXJ5IGFuZCBiZXN0LWVmZm9ydCBvcmRlcmluZy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InFhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPC9kZWZzPgo8cmVjdCB4PSI4IiB5PSIzNCIgd2lkdGg9IjgyMCIgaGVpZ2h0PSIyMDAiIHJ4PSIxNiIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjI2IiB5PSI1NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjgiPkNVU1RPTUVSJ1MgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxMTgiIHdpZHRoPSI5NiIgaGVpZ2h0PSI3NiIgcng9IjEyIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjcyIiB5PSIxNTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjcyIiB5PSIxNjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5TUVMgU0RLPC90ZXh0Pgo8dGV4dCB4PSI3MiIgeT0iMTg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjEyMCIgeTE9IjE1NiIgeDI9IjE1MiIgeTI9IjE1NiIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcWEpIi8+CjxyZWN0IHg9IjE1NCIgeT0iMTI2IiB3aWR0aD0iMTQwIiBoZWlnaHQ9IjYwIiByeD0iMTIiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMjI0IiB5PSIxNTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTNweCI+VGVuc29yOSBsYXllcjwvdGV4dD4KPHRleHQgeD0iMjI0IiB5PSIxNzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPnN0YXRlIGluIENvc21vcyBEQjwvdGV4dD4KPGxpbmUgeDE9IjI5NiIgeTE9IjE1NiIgeDI9IjM2MCIgeTI9IjE1NiIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcWEpIi8+Cjx0ZXh0IHg9IjMyOCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkOCI+Q29zbW9zIFNRTDwvdGV4dD4KPHRleHQgeD0iMzI4IiB5PSIxNjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij5rZXlsZXNzPC90ZXh0Pgo8cmVjdCB4PSIzNjQiIHk9IjcwIiB3aWR0aD0iNDU2IiBoZWlnaHQ9IjE1NiIgcng9IjEzIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjU5MSIgeT0iOTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5BenVyZSBDb3Ntb3MgREI8L3RleHQ+Cjx0ZXh0IHg9IjU5MSIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDoxMHB4ICdTRiBNb25vJyxNZW5sbyxtb25vc3BhY2U7ZmlsbDogI2M5Y2ZkOCI+b25lIHNlcnZlcmxlc3MgYWNjb3VudCDCtyBkYXRhYmFzZSBwZXIgYXBwbGlhbmNlPC90ZXh0Pgo8cmVjdCB4PSIzODAiIHk9IjEyNCIgd2lkdGg9IjIwNiIgaGVpZ2h0PSI5MCIgcng9IjEwIiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjQ4MyIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDA7ZmlsbDogI2M5Y2ZkOCI+bWVzc2FnZSBkb2N1bWVudHM8L3RleHQ+Cjx0ZXh0IHg9IjQ4MyIgeT0iMTcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+Ym9keSDCtyBhdHRyaWJ1dGVzIMK3IHJlY2VpdmUgY291bnQ8L3RleHQ+Cjx0ZXh0IHg9IjQ4MyIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+cmV0ZW50aW9uIGV4cGlyZXMgbWVzc2FnZXM8L3RleHQ+CjxyZWN0IHg9IjU5OCIgeT0iMTI0IiB3aWR0aD0iMjA2IiBoZWlnaHQ9IjkwIiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNzAxIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+cmVjZWl2ZSBjbGFpbXM8L3RleHQ+Cjx0ZXh0IHg9IjcwMSIgeT0iMTcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5jb25kaXRpb25hbCB3cml0ZXMgY2hvb3NlIG93bmVyPC90ZXh0Pgo8dGV4dCB4PSI3MDEiIHk9IjE5MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+dmlzaWJpbGl0eSBleHBpcnkgYWxsb3dzIHJlZGVsaXZlcnk8L3RleHQ+Cjwvc3ZnPg==" alt="The adapter serves SQS requests using Azure Cosmos DB. One serverless account and database hold one container per declared queue. Cosmos stores messages and coordinates claims. Standard queues claim eligible messages with at-least-once delivery and best-effort ordering." />
</div>

<p className="t9-caption">A queue is one Cosmos container and each message is a document; a Standard queue stores messages durably and claims eligible messages with best-effort ordering.</p>

#### Receiving messages

Receiving atomically claims the oldest visible message, hides it from other receivers and increments its receive count. If another receiver claims the candidate first, the adapter moves to the next one. Each successful conditional write has one owner; visibility expiry still permits redelivery.

Standard queues use **at-least-once delivery with best-effort ordering**. `ApproximateReceiveCount` is the **real** receive count (incremented on each claim, not estimated), and the SQS MD5-of-body and MD5-of-attributes are recomputed so your SDK verifies them byte-for-byte. Standard queues keep a delayed message invisible for its requested `DelaySeconds`, up to a maximum of 900 seconds. An omitted value means zero; larger values return `InvalidParameterValue`. A `SendMessageBatch` runs as per-entry writes with faithful per-entry outcomes.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjQwIiB2aWV3Qm94PSIwIDAgODM2IDI0MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIGNvbmRpdGlvbmFsIHdyaXRlIGNsYWltcyBhbiBlbGlnaWJsZSBtZXNzYWdlLiBBIGNvbXBldGluZyByZWNlaXZlciB0aGF0IGxvc2VzIHRoZSBjbGFpbSB0cmllcyBhbm90aGVyIGNhbmRpZGF0ZS4gVmlzaWJpbGl0eSBleHBpcnkgY2FuIGNhdXNlIHJlZGVsaXZlcnkuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9InJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPG1hcmtlciBpZD0icmciIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzA1OTY2OSIvPjwvbWFya2VyPgo8bWFya2VyIGlkPSJyeCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjZjU5ZTBiIi8+PC9tYXJrZXI+PC9kZWZzPgo8Y2lyY2xlIGN4PSI0MCIgY3k9IjYwIiByPSIxMyIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSI2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj4xPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iNDIiIHdpZHRoPSIyNzIiIGhlaWdodD0iNDgiIHJ4PSIxMCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI3NiIgeT0iNjIiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5GaW5kIHRoZSBvbGRlc3QgdmlzaWJsZSBtZXNzYWdlPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iNzkiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5vbGRlc3QgPHRzcGFuIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiM0NzU1NjkiPnZpc2libGU8L3RzcGFuPiBtZXNzYWdlIGZpcnN0PC90ZXh0Pgo8bGluZSB4MT0iMTgwIiB5MT0iOTAiIHgyPSIxODAiIHkyPSIxMTIiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcmEpIi8+CjxjaXJjbGUgY3g9IjQwIiBjeT0iMTM0IiByPSIxMyIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSIxMzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+MjwvdGV4dD4KPHJlY3QgeD0iNjIiIHk9IjExNiIgd2lkdGg9IjI3MiIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSIxMzYiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5UYWtlIHRoZSBjYW5kaWRhdGU8L3RleHQ+Cjx0ZXh0IHg9Ijc2IiB5PSIxNTMiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5jbGFpbSBpdCA8dHNwYW4gc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzQ3NTU2OSI+YXRvbWljYWxseTwvdHNwYW4+LCBvbmUgb3duZXI8L3RleHQ+CjxsaW5lIHgxPSIxODAiIHkxPSIxNjQiIHgyPSIxODAiIHkyPSIxODYiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcmEpIi8+CjxjaXJjbGUgY3g9IjQwIiBjeT0iMjA4IiByPSIxMyIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSIyMTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+MzwvdGV4dD4KPHJlY3QgeD0iNjIiIHk9IjE5MCIgd2lkdGg9IjI3MiIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSIyMTAiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTIuNXB4Ij5DbGFpbSBpdCBmb3Igb25lIGNvbnN1bWVyPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iMjI3IiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5oaWRkZW4gZnJvbSBvdGhlcnMgwrcgcmVjZWl2ZSBjb3VudCBpbmNyZW1lbnRlZDwvdGV4dD4KPGxpbmUgeDE9IjMzNCIgeTE9IjIwNiIgeDI9IjM4NiIgeTI9IjEyMiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNyZykiLz4KPGxpbmUgeDE9IjMzNCIgeTE9IjIyMCIgeDI9IjM4NiIgeTI9IjE5NiIgc3Ryb2tlPSIjZjU5ZTBiIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNyeCkiLz4KPHJlY3QgeD0iMzg4IiB5PSIxMDAiIHdpZHRoPSI0MjQiIGhlaWdodD0iNDQiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI2MDAiIHk9IjExOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMnB4Ij5jbGFpbWVkIOKGkiBtZXNzYWdlIGRlbGl2ZXJlZDwvdGV4dD4KPHRleHQgeD0iNjAwIiB5PSIxMzQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPnJlY2VpcHQgaGFuZGxlIHJldHVybmVkIHRvIHlvdXIgY29uc3VtZXI8L3RleHQ+CjxyZWN0IHg9IjM4OCIgeT0iMTc0IiB3aWR0aD0iNDI0IiBoZWlnaHQ9IjQ0IiByeD0iMTAiIGZpbGw9IiNmZmZiZWIiIHN0cm9rZT0iI2ZkZTY4YSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNjAwIiB5PSIxOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OjYwMCAxMnB4IEludGVyLHNhbnMtc2VyaWY7ZmlsbDojYjQ1MzA5Ij5hbHJlYWR5IGNsYWltZWQgYnkgYW5vdGhlciBjb25zdW1lcjwvdGV4dD4KPHRleHQgeD0iNjAwIiB5PSIyMDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiNiNDUzMDkiPmNsYWltIGNvbmZsaWN0OiB0cnkgYW5vdGhlciBjYW5kaWRhdGU8L3RleHQ+Cjwvc3ZnPg==" alt="A conditional write claims an eligible message. A competing receiver that loses the claim tries another candidate. Visibility expiry can cause redelivery." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjQwIiB2aWV3Qm94PSIwIDAgODM2IDI0MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIGNvbmRpdGlvbmFsIHdyaXRlIGNsYWltcyBhbiBlbGlnaWJsZSBtZXNzYWdlLiBBIGNvbXBldGluZyByZWNlaXZlciB0aGF0IGxvc2VzIHRoZSBjbGFpbSB0cmllcyBhbm90aGVyIGNhbmRpZGF0ZS4gVmlzaWJpbGl0eSBleHBpcnkgY2FuIGNhdXNlIHJlZGVsaXZlcnkuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9InJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPG1hcmtlciBpZD0icmciIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzIwZjdiNCIvPjwvbWFya2VyPgo8bWFya2VyIGlkPSJyeCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjZjU5ZTBiIi8+PC9tYXJrZXI+PC9kZWZzPgo8Y2lyY2xlIGN4PSI0MCIgY3k9IjYwIiByPSIxMyIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPjx0ZXh0IHg9IjQwIiB5PSI2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj4xPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iNDIiIHdpZHRoPSIyNzIiIGhlaWdodD0iNDgiIHJ4PSIxMCIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI3NiIgeT0iNjIiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5GaW5kIHRoZSBvbGRlc3QgdmlzaWJsZSBtZXNzYWdlPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iNzkiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5vbGRlc3QgPHRzcGFuIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjYzljZmQ4Ij52aXNpYmxlPC90c3Bhbj4gbWVzc2FnZSBmaXJzdDwvdGV4dD4KPGxpbmUgeDE9IjE4MCIgeTE9IjkwIiB4Mj0iMTgwIiB5Mj0iMTEyIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI3JhKSIvPgo8Y2lyY2xlIGN4PSI0MCIgY3k9IjEzNCIgcj0iMTMiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48dGV4dCB4PSI0MCIgeT0iMTM4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPjI8L3RleHQ+CjxyZWN0IHg9IjYyIiB5PSIxMTYiIHdpZHRoPSIyNzIiIGhlaWdodD0iNDgiIHJ4PSIxMCIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI3NiIgeT0iMTM2IiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEyLjVweCI+VGFrZSB0aGUgY2FuZGlkYXRlPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iMTUzIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+Y2xhaW0gaXQgPHRzcGFuIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjYzljZmQ4Ij5hdG9taWNhbGx5PC90c3Bhbj4sIG9uZSBvd25lcjwvdGV4dD4KPGxpbmUgeDE9IjE4MCIgeTE9IjE2NCIgeDI9IjE4MCIgeTI9IjE4NiIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNyYSkiLz4KPGNpcmNsZSBjeD0iNDAiIGN5PSIyMDgiIHI9IjEzIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PHRleHQgeD0iNDAiIHk9IjIxMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj4zPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iMTkwIiB3aWR0aD0iMjcyIiBoZWlnaHQ9IjQ4IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzYiIHk9IjIxMCIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMi41cHgiPkNsYWltIGl0IGZvciBvbmUgY29uc3VtZXI8L3RleHQ+Cjx0ZXh0IHg9Ijc2IiB5PSIyMjciIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmhpZGRlbiBmcm9tIG90aGVycyDCtyByZWNlaXZlIGNvdW50IGluY3JlbWVudGVkPC90ZXh0Pgo8bGluZSB4MT0iMzM0IiB5MT0iMjA2IiB4Mj0iMzg2IiB5Mj0iMTIyIiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI3JnKSIvPgo8bGluZSB4MT0iMzM0IiB5MT0iMjIwIiB4Mj0iMzg2IiB5Mj0iMTk2IiBzdHJva2U9IiNmNTllMGIiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI3J4KSIvPgo8cmVjdCB4PSIzODgiIHk9IjEwMCIgd2lkdGg9IjQyNCIgaGVpZ2h0PSI0NCIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjYwMCIgeT0iMTE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPmNsYWltZWQg4oaSIG1lc3NhZ2UgZGVsaXZlcmVkPC90ZXh0Pgo8dGV4dCB4PSI2MDAiIHk9IjEzNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+cmVjZWlwdCBoYW5kbGUgcmV0dXJuZWQgdG8geW91ciBjb25zdW1lcjwvdGV4dD4KPHJlY3QgeD0iMzg4IiB5PSIxNzQiIHdpZHRoPSI0MjQiIGhlaWdodD0iNDQiIHJ4PSIxMCIgZmlsbD0iIzMxMmQxYSIgc3Ryb2tlPSIjNjY1ZDNkIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI2MDAiIHk9IjE5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6NjAwIDEycHggSW50ZXIsc2Fucy1zZXJpZjtmaWxsOiAjZGViMjkwIj5hbHJlYWR5IGNsYWltZWQgYnkgYW5vdGhlciBjb25zdW1lcjwvdGV4dD4KPHRleHQgeD0iNjAwIiB5PSIyMDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGViMjkwIj5jbGFpbSBjb25mbGljdDogdHJ5IGFub3RoZXIgY2FuZGlkYXRlPC90ZXh0Pgo8L3N2Zz4=" alt="A conditional write claims an eligible message. A competing receiver that loses the claim tries another candidate. Visibility expiry can cause redelivery." />
</div>

<p className="t9-caption">A receive reads the oldest visible message and claims it for exactly one consumer; if another consumer claims it first, this receive moves to the next candidate. ApproximateReceiveCount is the real receive count, incremented on each claim, never estimated.</p>

#### Receipt handles & visibility

SQS hands your consumer a **receipt handle** to delete or extend a message. Here that handle is a token for claim state stored in Cosmos DB. Because the adapter keeps no in-memory lock table, a current handle resolves the same way before and after a restart: `DeleteMessage` and `ChangeMessageVisibility` keep working. A stale handle (the message was already deleted, or a newer claim superseded this one) is a **no-op on delete**, exactly as SQS's own stale handle is; a cross-queue or unparseable handle is rejected as `ReceiptHandleIsInvalid`.

`ChangeMessageVisibility` updates the stored visibility time without a broker lock-duration maximum. Zero makes the message immediately available to claim again. Retention can expire a message while it is in flight; extending visibility does not extend its lifetime. A stale handle is rejected, allowing the consumer to detect that it no longer owns the claim. Visibility expiry does not stop a worker from continuing to process an earlier receive.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpcHQgaGFuZGxlIGlzIHBsYWluIGRhdGEgd2l0aCBubyBicm9rZXIgbG9jayBiZWhpbmQgaXQsIHNvIGl0IHJlc29sdmVzIHRoZSBzYW1lIGFmdGVyIHRoZSBhZGFwdGVyIHJlc3RhcnRzLiBUaGUgdmlzaWJpbGl0eSB0aW1lb3V0IGhhcyBubyBjZWlsaW5nOiBDaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSBleHRlbmRzIGl0IGZvcndhcmQgd2l0aCBubyBjYXAsIHdoZXJlIGEgYnJva2VyLWJhY2tlZCBiYWNrZW5kIHdvdWxkIHN0b3AgYXQgaXRzIGxvY2sgY2VpbGluZy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0idmEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzA1OTY2OSIvPjwvbWFya2VyPjwvZGVmcz4KPHRleHQgeD0iMjYiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDQ3ODU3Ij5TVEFURUxFU1MgUkVDRUlQVCBIQU5ETEU8L3RleHQ+CjxyZWN0IHg9IjI2IiB5PSIzOCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIxNDIiIHJ4PSIxNCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8cmVjdCB4PSI0NCIgeT0iNTgiIHdpZHRoPSIzMjQiIGhlaWdodD0iMzQiIHJ4PSI4IiBmaWxsPSIjZmZmIiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjIwNiIgeT0iODAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiMwNDc4NTciPnJlY2VpcHQgaGFuZGxlIChvcGFxdWUgdG9rZW4pPC90ZXh0Pgo8dGV4dCB4PSIyMDYiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnBsYWluIGRhdGEsIG5vIGJyb2tlciBsb2NrIGJlaGluZCBpdDwvdGV4dD4KPGxpbmUgeDE9IjIwNiIgeTE9IjEyMCIgeDI9IjIwNiIgeTI9IjEzNiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjEuNiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAzIi8+Cjx0ZXh0IHg9IjIwNiIgeT0iMTQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPihhZGFwdGVyIHJlc3RhcnRzKTwvdGV4dD4KPHRleHQgeD0iMjA2IiB5PSIxNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA1OTY2OSI+cmVzb2x2ZXMgdGhlIHNhbWU6IERlbGV0ZSAvIENoYW5nZVZpc2liaWxpdHkgc3RpbGwgd29yazwvdGV4dD4KPGxpbmUgeDE9IjM5OCIgeTE9IjM0IiB4Mj0iMzk4IiB5Mj0iMTg0IiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjQyNCIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiM2NDc0OGIiPlVOQ0FQUEVEIFZJU0lCSUxJVFk8L3RleHQ+CjxyZWN0IHg9IjQyNCIgeT0iMzgiIHdpZHRoPSIzODYiIGhlaWdodD0iMTQyIiByeD0iMTQiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPGxpbmUgeDE9IjQ0NiIgeTE9IjEwNCIgeDI9IjgwNiIgeTI9IjEwNCIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjIiLz4KPHJlY3QgeD0iNDQ2IiB5PSI4OCIgd2lkdGg9Ijc4IiBoZWlnaHQ9IjE4IiByeD0iNCIgZmlsbD0iI2E3ZjNkMCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iNTI4IiB5PSI4OCIgd2lkdGg9Ijc4IiBoZWlnaHQ9IjE4IiByeD0iNCIgZmlsbD0iIzZlZTdiNyIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iNjEwIiB5PSI4OCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIxOCIgcng9IjQiIGZpbGw9IiMxMGI5ODEiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3MzQiIHkxPSI5NyIgeDI9IjgwMCIgeTI9Ijk3IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCN2YSkiLz4KPHRleHQgeD0iNDg0IiB5PSI4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGIiPnZpc2liaWxpdHk8L3RleHQ+Cjx0ZXh0IHg9IjU2NiIgeT0iODAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiMwNTk2NjkiPitleHRlbmQ8L3RleHQ+Cjx0ZXh0IHg9IjY2OCIgeT0iODAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiMwNTk2NjkiPitleHRlbmQ8L3RleHQ+Cjx0ZXh0IHg9Ijc3MiIgeT0iODAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+bm8gY2FwPC90ZXh0Pgo8dGV4dCB4PSI2MTciIHk9IjEzNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPkNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5IGV4dGVuZHMgdmlzaWJpbGl0eSBmb3J3YXJkLCBubyBicm9rZXIgY2VpbGluZzwvdGV4dD4KPHRleHQgeD0iNjE3IiB5PSIxNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiM5NGEzYjgiPihhIGJyb2tlci1iYWNrZWQgYmFja2VuZCB3b3VsZCBzdG9wIGF0IGl0cyBsb2NrIGNlaWxpbmcpPC90ZXh0Pgo8L3N2Zz4=" alt="A receipt handle is plain data with no broker lock behind it, so it resolves the same after the adapter restarts. The visibility timeout has no ceiling: ChangeMessageVisibility extends it forward with no cap, where a broker-backed backend would stop at its lock ceiling." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpcHQgaGFuZGxlIGlzIHBsYWluIGRhdGEgd2l0aCBubyBicm9rZXIgbG9jayBiZWhpbmQgaXQsIHNvIGl0IHJlc29sdmVzIHRoZSBzYW1lIGFmdGVyIHRoZSBhZGFwdGVyIHJlc3RhcnRzLiBUaGUgdmlzaWJpbGl0eSB0aW1lb3V0IGhhcyBubyBjZWlsaW5nOiBDaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eSBleHRlbmRzIGl0IGZvcndhcmQgd2l0aCBubyBjYXAsIHdoZXJlIGEgYnJva2VyLWJhY2tlZCBiYWNrZW5kIHdvdWxkIHN0b3AgYXQgaXRzIGxvY2sgY2VpbGluZy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0idmEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzIwZjdiNCIvPjwvbWFya2VyPjwvZGVmcz4KPHRleHQgeD0iMjYiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwZGVjOCI+U1RBVEVMRVNTIFJFQ0VJUFQgSEFORExFPC90ZXh0Pgo8cmVjdCB4PSIyNiIgeT0iMzgiIHdpZHRoPSIzNjAiIGhlaWdodD0iMTQyIiByeD0iMTQiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHJlY3QgeD0iNDQiIHk9IjU4IiB3aWR0aD0iMzI0IiBoZWlnaHQ9IjM0IiByeD0iOCIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSIyMDYiIHk9IjgwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzkwZGVjOCI+cmVjZWlwdCBoYW5kbGUgKG9wYXF1ZSB0b2tlbik8L3RleHQ+Cjx0ZXh0IHg9IjIwNiIgeT0iMTEyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+cGxhaW4gZGF0YSwgbm8gYnJva2VyIGxvY2sgYmVoaW5kIGl0PC90ZXh0Pgo8bGluZSB4MT0iMjA2IiB5MT0iMTIwIiB4Mj0iMjA2IiB5Mj0iMTM2IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMS42IiBzdHJva2UtZGFzaGFycmF5PSIzIDMiLz4KPHRleHQgeD0iMjA2IiB5PSIxNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+KGFkYXB0ZXIgcmVzdGFydHMpPC90ZXh0Pgo8dGV4dCB4PSIyMDYiIHk9IjE2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM2Ij5yZXNvbHZlcyB0aGUgc2FtZTogRGVsZXRlIC8gQ2hhbmdlVmlzaWJpbGl0eSBzdGlsbCB3b3JrPC90ZXh0Pgo8bGluZSB4MT0iMzk4IiB5MT0iMzQiIHgyPSIzOTgiIHkyPSIxODQiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNDI0IiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICNjOWNmZDgiPlVOQ0FQUEVEIFZJU0lCSUxJVFk8L3RleHQ+CjxyZWN0IHg9IjQyNCIgeT0iMzgiIHdpZHRoPSIzODYiIGhlaWdodD0iMTQyIiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPGxpbmUgeDE9IjQ0NiIgeTE9IjEwNCIgeDI9IjgwNiIgeTI9IjEwNCIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjIiLz4KPHJlY3QgeD0iNDQ2IiB5PSI4OCIgd2lkdGg9Ijc4IiBoZWlnaHQ9IjE4IiByeD0iNCIgZmlsbD0iIzFhMzEyNyIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iNTI4IiB5PSI4OCIgd2lkdGg9Ijc4IiBoZWlnaHQ9IjE4IiByeD0iNCIgZmlsbD0iIzFhMzEyOCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iNjEwIiB5PSI4OCIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIxOCIgcng9IjQiIGZpbGw9IiMxMGI5ODEiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3MzQiIHkxPSI5NyIgeDI9IjgwMCIgeTI9Ijk3IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCN2YSkiLz4KPHRleHQgeD0iNDg0IiB5PSI4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDgiPnZpc2liaWxpdHk8L3RleHQ+Cjx0ZXh0IHg9IjU2NiIgeT0iODAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBkZWM2Ij4rZXh0ZW5kPC90ZXh0Pgo8dGV4dCB4PSI2NjgiIHk9IjgwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzkwZGVjNiI+K2V4dGVuZDwvdGV4dD4KPHRleHQgeD0iNzcyIiB5PSI4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj5ubyBjYXA8L3RleHQ+Cjx0ZXh0IHg9IjYxNyIgeT0iMTM0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHkgZXh0ZW5kcyB2aXNpYmlsaXR5IGZvcndhcmQsIG5vIGJyb2tlciBjZWlsaW5nPC90ZXh0Pgo8dGV4dCB4PSI2MTciIHk9IjE1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICM5NGEzYjgiPihhIGJyb2tlci1iYWNrZWQgYmFja2VuZCB3b3VsZCBzdG9wIGF0IGl0cyBsb2NrIGNlaWxpbmcpPC90ZXh0Pgo8L3N2Zz4=" alt="A receipt handle is plain data with no broker lock behind it, so it resolves the same after the adapter restarts. The visibility timeout has no ceiling: ChangeMessageVisibility extends it forward with no cap, where a broker-backed backend would stop at its lock ceiling." />
</div>

<p className="t9-caption">Receipt handles remain usable after an adapter restart. Visibility is stored in Cosmos DB and has no broker lock-duration limit.</p>

#### FIFO queues

For message-group ordering and five-minute send deduplication, see [SQS FIFO](/service-adapters/aws/messaging-streaming/sqs-fifo).

#### Dead-letter queues

A message received more than `maxReceiveCount` times is moved to the declared dead-letter queue. If the adapter crashes during the move, retry ensures it reaches the DLQ before removal from the source. A retry can produce a duplicate in the DLQ; consumers there must handle at-least-once delivery.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIGZhaWxlZCBtZXNzYWdlIGlzIGNvcGllZCB0byBpdHMgZGVhZC1sZXR0ZXIgcXVldWUgYW5kIHRoZW4gcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2UuIElmIHRoZSBhZGFwdGVyIGNyYXNoZXMgYmV0d2VlbiB0aG9zZSBzdGVwcywgcmV0cnkgY29tcGxldGVzIHRoZSBtb3ZlOyB0aGUgZGVhZC1sZXR0ZXIgcXVldWUgY2FuIGNvbnRhaW4gYSBkdXBsaWNhdGUuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJkYSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMDU5NjY5Ii8+PC9tYXJrZXI+CjxtYXJrZXIgaWQ9ImR4IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiNkYzI2MjYiLz48L21hcmtlcj4KPC9kZWZzPgo8dGV4dCB4PSIyNiIgeT0iMjgiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiNiNDUzMDkiPlNPVVJDRSBRVUVVRTwvdGV4dD4KPHJlY3QgeD0iMjYiIHk9IjQyIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjU0IiByeD0iMTIiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMTI2IiB5PSI2OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMS41cHgiPmZhaWxlZCBtZXNzYWdlPC90ZXh0Pgo8dGV4dCB4PSIxMjYiIHk9Ijg2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZmlsbDojYjQ1MzA5Ij5yZWNlaXZlIGNvdW50IOKJpSBtYXg8L3RleHQ+CjxsaW5lIHgxPSIyMjYiIHkxPSI2OSIgeDI9IjI2NiIgeTI9IjY5IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNkYSkiLz4KPHRleHQgeD0iMjQ2IiB5PSI2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj4xPC90ZXh0Pgo8cmVjdCB4PSIyNzAiIHk9IjQyIiB3aWR0aD0iMTk2IiBoZWlnaHQ9IjU0IiByeD0iMTIiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjYiLz4KPHRleHQgeD0iMzY4IiB5PSI2OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMS41cHgiPm1vdmUgdG8gRExRPC90ZXh0Pgo8dGV4dCB4PSIzNjgiIHk9Ijg2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5jb3B5IHRoZW4gcmVtb3ZlOyByZXRyeSBtYXkgZHVwbGljYXRlPC90ZXh0Pgo8bGluZSB4MT0iNDY2IiB5MT0iNjkiIHgyPSI1MDYiIHkyPSI2OSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZGEpIi8+CjxyZWN0IHg9IjUxMCIgeT0iNDIiIHdpZHRoPSIzMDAiIGhlaWdodD0iNTQiIHJ4PSIxMiIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNiIvPgo8dGV4dCB4PSI2NjAiIHk9IjY4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPmRlYWQtbGV0dGVyIHF1ZXVlPC90ZXh0Pgo8dGV4dCB4PSI2NjAiIHk9Ijg2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5mcmVzaCByZWNlaXZlIGNvdW50IMK3IGdyb3VwIG9yZGVyIGtlcHQ8L3RleHQ+CjxsaW5lIHgxPSIxMjYiIHkxPSI5NiIgeDI9IjEyNiIgeTI9IjEyOCIgc3Ryb2tlPSIjZGMyNjI2IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNkeCkiLz4KPHRleHQgeD0iMTQwIiB5PSIxMTgiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiNiOTFjMWMiPjIgwrcgcmVtb3ZlIGZyb20gc291cmNlPC90ZXh0Pgo8cmVjdCB4PSIyNiIgeT0iMTQ2IiB3aWR0aD0iNzg0IiBoZWlnaHQ9IjQwIiByeD0iMTAiIGZpbGw9IiNmZmZiZWIiIHN0cm9rZT0iI2ZkZTY4YSIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNDE4IiB5PSIxNzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiNiNDUzMDkiPlJldHJ5IGNvbXBsZXRlcyBhIG1vdmUgaW50ZXJydXB0ZWQgYmV0d2VlbiB0aGVzZSBzdGVwczsgdGhlIGRlYWQtbGV0dGVyIHF1ZXVlIGNhbiByZWNlaXZlIGEgZHVwbGljYXRlLjwvdGV4dD4KPC9zdmc+" alt="A failed message is copied to its dead-letter queue and then removed from the source. If the adapter crashes between those steps, retry completes the move; the dead-letter queue can contain a duplicate." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIGZhaWxlZCBtZXNzYWdlIGlzIGNvcGllZCB0byBpdHMgZGVhZC1sZXR0ZXIgcXVldWUgYW5kIHRoZW4gcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2UuIElmIHRoZSBhZGFwdGVyIGNyYXNoZXMgYmV0d2VlbiB0aG9zZSBzdGVwcywgcmV0cnkgY29tcGxldGVzIHRoZSBtb3ZlOyB0aGUgZGVhZC1sZXR0ZXIgcXVldWUgY2FuIGNvbnRhaW4gYSBkdXBsaWNhdGUuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJkYSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMjBmN2I0Ii8+PC9tYXJrZXI+CjxtYXJrZXIgaWQ9ImR4IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiNkYzI2MjYiLz48L21hcmtlcj4KPC9kZWZzPgo8dGV4dCB4PSIyNiIgeT0iMjgiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjZGViMjkwIj5TT1VSQ0UgUVVFVUU8L3RleHQ+CjxyZWN0IHg9IjI2IiB5PSI0MiIgd2lkdGg9IjIwMCIgaGVpZ2h0PSI1NCIgcng9IjEyIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjEyNiIgeT0iNjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTEuNXB4Ij5mYWlsZWQgbWVzc2FnZTwvdGV4dD4KPHRleHQgeD0iMTI2IiB5PSI4NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNkZWIyOTAiPnJlY2VpdmUgY291bnQg4omlIG1heDwvdGV4dD4KPGxpbmUgeDE9IjIyNiIgeTE9IjY5IiB4Mj0iMjY2IiB5Mj0iNjkiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2RhKSIvPgo8dGV4dCB4PSIyNDYiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPjE8L3RleHQ+CjxyZWN0IHg9IjI3MCIgeT0iNDIiIHdpZHRoPSIxOTYiIGhlaWdodD0iNTQiIHJ4PSIxMiIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNiIvPgo8dGV4dCB4PSIzNjgiIHk9IjY4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjExLjVweCI+bW92ZSB0byBETFE8L3RleHQ+Cjx0ZXh0IHg9IjM2OCIgeT0iODYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmNvcHkgdGhlbiByZW1vdmU7IHJldHJ5IG1heSBkdXBsaWNhdGU8L3RleHQ+CjxsaW5lIHgxPSI0NjYiIHkxPSI2OSIgeDI9IjUwNiIgeTI9IjY5IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNkYSkiLz4KPHJlY3QgeD0iNTEwIiB5PSI0MiIgd2lkdGg9IjMwMCIgaGVpZ2h0PSI1NCIgcng9IjEyIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjY2MCIgeT0iNjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTJweCI+ZGVhZC1sZXR0ZXIgcXVldWU8L3RleHQ+Cjx0ZXh0IHg9IjY2MCIgeT0iODYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmZyZXNoIHJlY2VpdmUgY291bnQgwrcgZ3JvdXAgb3JkZXIga2VwdDwvdGV4dD4KPGxpbmUgeDE9IjEyNiIgeTE9Ijk2IiB4Mj0iMTI2IiB5Mj0iMTI4IiBzdHJva2U9IiNkYzI2MjYiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2R4KSIvPgo8dGV4dCB4PSIxNDAiIHk9IjExOCIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNkZTkwOTAiPjIgwrcgcmVtb3ZlIGZyb20gc291cmNlPC90ZXh0Pgo8cmVjdCB4PSIyNiIgeT0iMTQ2IiB3aWR0aD0iNzg0IiBoZWlnaHQ9IjQwIiByeD0iMTAiIGZpbGw9IiMzMTJkMWEiIHN0cm9rZT0iIzY2NWQzZCIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNDE4IiB5PSIxNzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGViMjkwIj5SZXRyeSBjb21wbGV0ZXMgYSBtb3ZlIGludGVycnVwdGVkIGJldHdlZW4gdGhlc2Ugc3RlcHM7IHRoZSBkZWFkLWxldHRlciBxdWV1ZSBjYW4gcmVjZWl2ZSBhIGR1cGxpY2F0ZS48L3RleHQ+Cjwvc3ZnPg==" alt="A failed message is copied to its dead-letter queue and then removed from the source. If the adapter crashes between those steps, retry completes the move; the dead-letter queue can contain a duplicate." />
</div>

<p className="t9-caption">The adapter retries interrupted dead-letter moves. Delivery to the DLQ is at-least-once, so a crash can cause a duplicate.</p>

#### Limitations

△ Where SQS and Cosmos diverge, read before you adopt

* **Approximate counts can lag by about 5 seconds.** The adapter caches counts briefly, so recent sends, settlements and expirations may not be reflected immediately. Use Azure monitoring to observe counts after deployment.
* **Dead-letter delivery can produce duplicates.** Retry completes a move interrupted by an adapter crash without losing the message, but can deliver it to the DLQ more than once.
* **Queue capacity is bounded by the serverless container count.** All of an appliance's queues share one serverless Cosmos account, which caps at about 500 containers, so roughly 499 queues per appliance (one container per queue). Beyond that the build stops with a clear error rather than half-provisioning. The account is **serverless by design**, a fit for idle-heavy queue fleets.
* **Single region.** The account is single-region (the appliance's region); there is no geo-replica.
* **Cosmos DB removes expired messages.** Per-item time to live (TTL) is enforced by background cleanup. Expiry can occur while a consumer is processing the message.
* **Per-message delay.** Standard queues honor `DelaySeconds` up to a maximum of 900 seconds; larger values return `InvalidParameterValue`.
* **Separate logical queue management from container provisioning.** Max manages logical queues on provisioned containers, listings, tags and supported defaults, including retention. Terraform owns the account, database and containers; deleting a logical queue does not delete its container. Nonzero queue-level delay and new dead-letter routes are rejected.

#### Other considerations

* **Data migration.** The Cosmos account, database, and per-queue containers are provisioned empty at apply-time. In-flight SQS messages are not migrated; drain the source or coordinate dual writes before cutover.
* **Operations and ownership.** The adapter provisions the Cosmos deployment itself (one serverless account, one database per appliance, and one container per declared queue), all derived from your declared queues; the adapter is injected alongside the application. Microsoft operates Cosmos's durability, backup, and HA; Tensor9 operates the adapter. What remains operational for the deployment is the surrounding platform: the Azure subscription, cluster patching, and monitoring.
* **Monitor database usage.** Use Azure monitoring to track Cosmos DB request units and latency; queue counts are cached for about 5 seconds.
* **Retention is native, whole-second Cosmos TTL.** A message's remaining lifetime is Cosmos's native per-item TTL set to the remaining whole-second budget (floored at one second, so Cosmos reclaims at or after the message is hidden, never before it), with no background cleanup of its own.

### Via PostgreSQL Flexible Server

| Operation               | Area           | Support   | Depth      | Notes                                                                                                                   |
| ----------------------- | -------------- | --------- | ---------- | ----------------------------------------------------------------------------------------------------------------------- |
| Dead-letter redrive     | Dead-letter    | Supported | Most usage | fires automatically once a message passes maxReceiveCount                                                               |
| Message attributes      | Messages       | Supported | Common     | -                                                                                                                       |
| GetQueueAttributes      | Queues         | Supported | Most usage | reads queue attributes, including approximate message counts                                                            |
| GetQueueUrl             | Queues         | Supported | Most usage | resolves the queue by name                                                                                              |
| DelaySeconds            | Send / receive | Supported | Common     | a delayed message remains hidden until its delay expires                                                                |
| DeleteMessage           | Send / receive | Supported | Common     | resolves by receipt handle; a stale handle returns ReceiptHandleIsInvalid                                               |
| DeleteMessageBatch      | Send / receive | Supported | Common     | returns the result for each entry                                                                                       |
| ReceiveMessage          | Send / receive | Supported | Common     | long-poll (WaitTimeSeconds) honored; claims the oldest visible messages                                                 |
| SendMessage             | Send / receive | Supported | Common     | supports both SQS protocol formats; MD5 checksums match what your SDK verifies, identical to the portable Postgres tier |
| SendMessageBatch        | Send / receive | Supported | Common     | up to 10 messages per call; returns the result for each entry                                                           |
| ChangeMessageVisibility | Visibility     | Supported | Common     | resolves by receipt handle; a stale handle is rejected rather than silently succeeding                                  |

#### PostgreSQL hosting

Microsoft operates PostgreSQL Flexible Server, including zone-redundant HA and point-in-time recovery backups. The adapter uses short-lived Microsoft Entra tokens as database passwords. Queue data stays outside the customer's Kubernetes cluster and survives its rebuild. One server and database hold all queues for the deployment, sharing capacity and maintenance; the default server size is fixed because SQS supplies no source instance size. Tensor9 operates the queue schema and adapter. Queues start empty; existing SQS messages are not migrated. Drain the source or coordinate dual writes before cutover.

#### Queue behavior

The adapter uses the same PostgreSQL tables, atomic message claims, stored receipt handles and transactional dead-letter moves described in [PostgreSQL queue behavior](/service-adapters/aws/messaging-streaming/sqs-standard#postgresql-queue-behavior). Receipt handles survive adapter restarts; stale claims return an error. Retention still removes messages in flight. All queues share database capacity, so a busy queue can affect others. The documented Standard-queue benchmark does not establish this host's capacity or FIFO throughput. Delivery is at least once with best-effort ordering. For group ordering and deduplication, see [SQS FIFO](/service-adapters/aws/messaging-streaming/sqs-fifo).

## On OCI

### Via OCI Queue

| Operation               | Area           | Support   | Depth        | Notes                                                                                       |
| ----------------------- | -------------- | --------- | ------------ | ------------------------------------------------------------------------------------------- |
| Dead-letter             | Dead-letter    | Partial   | Most usage   | redrive maps to OCI Queue's delivery-count dead-letter (count-based)                        |
| Max message size        | Queues         | Supported | Full surface | 128 KB, OCI Queue's message ceiling                                                         |
| Message retention       | Queues         | Supported | Full surface | the SQS 4-day default is emitted explicitly; retention runs up to OCI Queue's 7-day maximum |
| Visibility timeout      | Queues         | Supported | Full surface | OCI Queue's 30 s default, passed through and honored                                        |
| DeleteMessage           | Send / receive | Supported | Common       | served onto OCI Queue's DeleteMessage                                                       |
| Long-polling            | Send / receive | Supported | Most usage   | native long-poll on GetMessages                                                             |
| ReceiveMessage          | Send / receive | Supported | Common       | served onto OCI Queue's GetMessages                                                         |
| SendMessage             | Send / receive | Supported | Common       | served onto OCI Queue's PutMessages; MD5 checksums recomputed for your SDK                  |
| ChangeMessageVisibility | Visibility     | Supported | Common       | resolves by receipt handle; the 30 s visibility default is honored and extended per message |

#### How it works

Tensor9 adds an adapter, a proxy process, to your application pod in OCI and sets `AWS_ENDPOINT_URL_SQS` to its loopback address. Your application keeps its `SendMessage` and `ReceiveMessage` calls. The adapter translates them to OCI Queue operations and returns SQS responses, error codes and MD5 checksums.

Each declared standard SQS queue becomes an OCI queue in the customer's compartment. `SendMessage` puts a message; `ReceiveMessage` gets one with a receipt; `DeleteMessage` deletes it using that receipt. OCI Queue stores messages, receipts, delivery counts and visibility deadlines, so the adapter holds no durable state. FIFO queues require a different target because OCI Queue does not support group ordering or deduplication.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24ncyBTUVMgU0RLIGNhbGxzIEFtYXpvbiBTUVMuIEFmdGVyOiBpbiBPQ0kgY2xvdWQgdGhlIHNhbWUgYXBwbGljYXRpb24gYW5kIFNESyBjYWxsIGEgVGVuc29yOSBhZGFwdGVyLCB3aGljaCBzZXJ2ZXMgdGhlIFNRUyBBUEkgZnJvbSBPQ0kgUXVldWUuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJhaDEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8L2RlZnM+CjxyZWN0IHg9IjE2IiB5PSI0NiIgd2lkdGg9IjM1OCIgaGVpZ2h0PSIxMTgiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6Izk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iODAiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI5MCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEyLjVweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjkwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5TUVMgU0RLPC90ZXh0Pgo8bGluZSB4MT0iMTUwIiB5MT0iMTEzIiB4Mj0iMjEwIiB5Mj0iMTEzIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhaDEpIi8+Cjx0ZXh0IHg9IjE4MSIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjguNXB4Ij5TUVMgQVBJPC90ZXh0Pgo8cmVjdCB4PSIyMTQiIHk9IjgwIiB3aWR0aD0iMTQ4IiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjg4IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+QW1hem9uIFNRUzwvdGV4dD4KPHRleHQgeD0iMjg4IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5BV1MtbWFuYWdlZDwvdGV4dD4KPGxpbmUgeDE9IjQxOCIgeTE9IjQwIiB4Mj0iNDE4IiB5Mj0iMTYwIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS40Ii8+CjxyZWN0IHg9IjQ2MiIgeT0iNDYiIHdpZHRoPSIzNjIiIGhlaWdodD0iMTE4IiByeD0iMTQiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSI0NzYiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDQ3ODU3Ij5JTiBPQ0kgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjQ3NCIgeT0iODAiIHdpZHRoPSI5MiIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUyMCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI1MjAiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5Ij5zYW1lIFNESzwvdGV4dD4KPGxpbmUgeDE9IjU2NiIgeTE9IjExMyIgeDI9IjU5MCIgeTI9IjExMyIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjYWgxKSIvPgo8cmVjdCB4PSI1OTQiIHk9Ijc2IiB3aWR0aD0iMTEwIiBoZWlnaHQ9Ijc0IiByeD0iMTEiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iNjQ5IiB5PSIxMDIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+VGVuc29yOTwvdGV4dD4KPHRleHQgeD0iNjQ5IiB5PSIxMTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPnNlcnZpY2U8L3RleHQ+Cjx0ZXh0IHg9IjY0OSIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5hZGFwdGVyPC90ZXh0Pgo8bGluZSB4MT0iNzA0IiB5MT0iMTEzIiB4Mj0iNzI4IiB5Mj0iMTEzIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhaDEpIi8+CjxyZWN0IHg9IjczMiIgeT0iODAiIHdpZHRoPSI4NCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijc3NCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExcHgiPk9DSSBRdWV1ZTwvdGV4dD4KPHRleHQgeD0iNzc0IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5PQ0ktbWFuYWdlZDwvdGV4dD4KPC9zdmc+" alt="Before: on AWS the application's SQS SDK calls Amazon SQS. After: in OCI cloud the same application and SDK call a Tensor9 adapter, which serves the SQS API from OCI Queue." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB0aGUgYXBwbGljYXRpb24ncyBTUVMgU0RLIGNhbGxzIEFtYXpvbiBTUVMuIEFmdGVyOiBpbiBPQ0kgY2xvdWQgdGhlIHNhbWUgYXBwbGljYXRpb24gYW5kIFNESyBjYWxsIGEgVGVuc29yOSBhZGFwdGVyLCB3aGljaCBzZXJ2ZXMgdGhlIFNRUyBBUEkgZnJvbSBPQ0kgUXVldWUuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPgo8bWFya2VyIGlkPSJhaDEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8L2RlZnM+CjxyZWN0IHg9IjE2IiB5PSI0NiIgd2lkdGg9IjM1OCIgaGVpZ2h0PSIxMTgiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5NGEzYjgiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9IjgwIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iOTAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMi41cHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI5MCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+U1FTIFNESzwvdGV4dD4KPGxpbmUgeDE9IjE1MCIgeTE9IjExMyIgeDI9IjIxMCIgeTI9IjExMyIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjYWgxKSIvPgo8dGV4dCB4PSIxODEiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZTo4LjVweCI+U1FTIEFQSTwvdGV4dD4KPHJlY3QgeD0iMjE0IiB5PSI4MCIgd2lkdGg9IjE0OCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI4OCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPkFtYXpvbiBTUVM8L3RleHQ+Cjx0ZXh0IHg9IjI4OCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+QVdTLW1hbmFnZWQ8L3RleHQ+CjxsaW5lIHgxPSI0MTgiIHkxPSI0MCIgeDI9IjQxOCIgeTI9IjE2MCIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8cmVjdCB4PSI0NjIiIHk9IjQ2IiB3aWR0aD0iMzYyIiBoZWlnaHQ9IjExOCIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iNDc2IiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPklOIE9DSSBDTE9VRDwvdGV4dD4KPHJlY3QgeD0iNDc0IiB5PSI4MCIgd2lkdGg9IjkyIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNTIwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjUyMCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnNhbWUgU0RLPC90ZXh0Pgo8bGluZSB4MT0iNTY2IiB5MT0iMTEzIiB4Mj0iNTkwIiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNhaDEpIi8+CjxyZWN0IHg9IjU5NCIgeT0iNzYiIHdpZHRoPSIxMTAiIGhlaWdodD0iNzQiIHJ4PSIxMSIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI2NDkiIHk9IjEwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5UZW5zb3I5PC90ZXh0Pgo8dGV4dCB4PSI2NDkiIHk9IjExNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+c2VydmljZTwvdGV4dD4KPHRleHQgeD0iNjQ5IiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmFkYXB0ZXI8L3RleHQ+CjxsaW5lIHgxPSI3MDQiIHkxPSIxMTMiIHgyPSI3MjgiIHkyPSIxMTMiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2FoMSkiLz4KPHJlY3QgeD0iNzMyIiB5PSI4MCIgd2lkdGg9Ijg0IiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzc0IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTFweCI+T0NJIFF1ZXVlPC90ZXh0Pgo8dGV4dCB4PSI3NzQiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPk9DSS1tYW5hZ2VkPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS the application's SQS SDK calls Amazon SQS. After: in OCI cloud the same application and SDK call a Tensor9 adapter, which serves the SQS API from OCI Queue." />
</div>

<p className="t9-caption">The application keeps its SQS SDK. The adapter translates calls to OCI Queue.</p>

#### Architecture

The Rust adapter uses OCI Queue receipts across calls and processes, so receipt handles remain usable after an adapter restart. Adapter instances can scale out without coordinating durable state. Authentication uses the customer's OCI workload identity without a static credential. Oracle operates queue durability, backups, replication and high availability; Tensor9 operates the adapter.

Terraform creates one OCI queue per declared SQS queue in the customer's compartment, preserving its name. Queue visibility uses the declared SQS default; both services default to 30 seconds. Retention maps to OCI Queue's retention, capped at 7 days. `maxReceiveCount` sets the delivery-count threshold. OCI Queue manages these settings and tracks queued and in-flight messages.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcmNoaXRlY3R1cmU6IHRoZSBhcHAncyBTUVMgU0RLIGNhbGxzIGEgVGVuc29yOSBhZGFwdGVyLCB3aGljaCBzZXJ2ZXMgdGhlIFNRUyBBUEkgZnJvbSBPQ0kgUXVldWUgdXNpbmcgd29ya2xvYWQgaWRlbnRpdHkuIEVhY2ggZGVjbGFyZWQgU1FTIHF1ZXVlIGlzIHByb3Zpc2lvbmVkIGFzIG9uZSBPQ0kgcXVldWUgaW4gdGhlIGN1c3RvbWVyJ3MgY29tcGFydG1lbnQsIHdpdGggaXRzIG5hbWUsIGRlZmF1bHQgdmlzaWJpbGl0eSwgcmV0ZW50aW9uIGFuZCByZWRyaXZlIHRocmVzaG9sZC4gT0NJIFF1ZXVlIHN0b3JlcyByZWNlaXB0IHRva2VucywgcmVjZWl2ZSBjb3VudHMgYW5kIHZpc2liaWxpdHkgZGVhZGxpbmVzLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0icWEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8L2RlZnM+CjxyZWN0IHg9IjgiIHk9IjM0IiB3aWR0aD0iODIwIiBoZWlnaHQ9IjE5MCIgcng9IjE2IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMjYiIHk9IjU0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiOCI+Q1VTVE9NRVInUyBPQ0kgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxMDQiIHdpZHRoPSI5NiIgaGVpZ2h0PSI4NCIgcng9IjEyIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjcyIiB5PSIxNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjcyIiB5PSIxNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5TUVMgU0RLPC90ZXh0Pgo8dGV4dCB4PSI3MiIgeT0iMTc0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNTk2NjkiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjEyMCIgeTE9IjE0NiIgeDI9IjE1MCIgeTI9IjE0NiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcWEpIi8+CjxyZWN0IHg9IjE1MiIgeT0iMTIwIiB3aWR0aD0iMTc2IiBoZWlnaHQ9IjU2IiByeD0iMTIiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMjQwIiB5PSIxNDIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTIuNXB4Ij5UZW5zb3I5IGxheWVyPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+c3RhdGVsZXNzIMK3IFJ1c3Q8L3RleHQ+CjxsaW5lIHgxPSIzMjgiIHkxPSIxNDgiIHgyPSIzNjYiIHkyPSIxNDgiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3FhKSIvPgo8dGV4dCB4PSIzNDciIHk9IjE0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZTo4LjVweCI+UkVTVDwvdGV4dD4KPHRleHQgeD0iMzQ3IiB5PSIxNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiMwNDc4NTc7Zm9udC1zaXplOjguNXB4Ij5rZXlsZXNzPC90ZXh0Pgo8cmVjdCB4PSIzNzAiIHk9IjYyIiB3aWR0aD0iNDUwIiBoZWlnaHQ9IjE1MiIgcng9IjEzIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjU5NSIgeT0iODQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+T0NJIFF1ZXVlIMK3IG9uZSBxdWV1ZSBwZXIgZGVjbGFyZWQgU1FTIHF1ZXVlPC90ZXh0Pgo8dGV4dCB4PSI1OTUiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDoxMHB4ICdTRiBNb25vJyxNZW5sbyxtb25vc3BhY2U7ZmlsbDojNjQ3NDhiIj5pbiB0aGUgY3VzdG9tZXIncyBjb21wYXJ0bWVudDwvdGV4dD4KPHJlY3QgeD0iMzg0IiB5PSIxMTAiIHdpZHRoPSI0MjIiIGhlaWdodD0iOTQiIHJ4PSIxMCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSI1OTUiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwO2ZpbGw6IzQ3NTU2OSI+cXVldWU6IG9yZGVycyAgKGNsYXNzaWMpPC90ZXh0Pgo8cmVjdCB4PSIzOTgiIHk9IjEzOCIgd2lkdGg9IjM5NCIgaGVpZ2h0PSIyMCIgcng9IjUiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIvPgo8dGV4dCB4PSI1OTUiIHk9IjE1MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6OS41cHggJ1NGIE1vbm8nLE1lbmxvLG1vbm9zcGFjZTtmaWxsOiM0NzU1NjkiPm5hbWUgPSBvcmRlcnMgICAgZGVmYXVsdCB2aXNpYmlsaXR5ID0gMzAgczwvdGV4dD4KPHJlY3QgeD0iMzk4IiB5PSIxNjIiIHdpZHRoPSIzOTQiIGhlaWdodD0iMjAiIHJ4PSI1IiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiLz4KPHRleHQgeD0iNTk1IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OjlweCAnU0YgTW9ubycsTWVubG8sbW9ub3NwYWNlO2ZpbGw6IzQ3NTU2OSI+cmV0ZW50aW9uID0gNCBkYXlzICgzNDU2MDAgcykgwrcgcmVkcml2ZSB0aHJlc2hvbGQgPSA1PC90ZXh0Pgo8dGV4dCB4PSI1OTUiIHk9IjE5NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPk9yYWNsZSBvcGVyYXRlcyBkdXJhYmlsaXR5IMK3IGJhY2t1cCDCtyBIQTwvdGV4dD4KPC9zdmc+" alt="Architecture: the app's SQS SDK calls a Tensor9 adapter, which serves the SQS API from OCI Queue using workload identity. Each declared SQS queue is provisioned as one OCI queue in the customer's compartment, with its name, default visibility, retention and redrive threshold. OCI Queue stores receipt tokens, receive counts and visibility deadlines." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcmNoaXRlY3R1cmU6IHRoZSBhcHAncyBTUVMgU0RLIGNhbGxzIGEgVGVuc29yOSBhZGFwdGVyLCB3aGljaCBzZXJ2ZXMgdGhlIFNRUyBBUEkgZnJvbSBPQ0kgUXVldWUgdXNpbmcgd29ya2xvYWQgaWRlbnRpdHkuIEVhY2ggZGVjbGFyZWQgU1FTIHF1ZXVlIGlzIHByb3Zpc2lvbmVkIGFzIG9uZSBPQ0kgcXVldWUgaW4gdGhlIGN1c3RvbWVyJ3MgY29tcGFydG1lbnQsIHdpdGggaXRzIG5hbWUsIGRlZmF1bHQgdmlzaWJpbGl0eSwgcmV0ZW50aW9uIGFuZCByZWRyaXZlIHRocmVzaG9sZC4gT0NJIFF1ZXVlIHN0b3JlcyByZWNlaXB0IHRva2VucywgcmVjZWl2ZSBjb3VudHMgYW5kIHZpc2liaWxpdHkgZGVhZGxpbmVzLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0icWEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPgo8L2RlZnM+CjxyZWN0IHg9IjgiIHk9IjM0IiB3aWR0aD0iODIwIiBoZWlnaHQ9IjE5MCIgcng9IjE2IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMjYiIHk9IjU0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiOCI+Q1VTVE9NRVInUyBPQ0kgQ0xPVUQ8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxMDQiIHdpZHRoPSI5NiIgaGVpZ2h0PSI4NCIgcng9IjEyIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjcyIiB5PSIxNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjcyIiB5PSIxNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5TUVMgU0RLPC90ZXh0Pgo8dGV4dCB4PSI3MiIgeT0iMTc0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjEyMCIgeTE9IjE0NiIgeDI9IjE1MCIgeTI9IjE0NiIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjcWEpIi8+CjxyZWN0IHg9IjE1MiIgeT0iMTIwIiB3aWR0aD0iMTc2IiBoZWlnaHQ9IjU2IiByeD0iMTIiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMjQwIiB5PSIxNDIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTIuNXB4Ij5UZW5zb3I5IGxheWVyPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+c3RhdGVsZXNzIMK3IFJ1c3Q8L3RleHQ+CjxsaW5lIHgxPSIzMjgiIHkxPSIxNDgiIHgyPSIzNjYiIHkyPSIxNDgiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI3FhKSIvPgo8dGV4dCB4PSIzNDciIHk9IjE0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZTo4LjVweCI+UkVTVDwvdGV4dD4KPHRleHQgeD0iMzQ3IiB5PSIxNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBkZWM4O2ZvbnQtc2l6ZTo4LjVweCI+a2V5bGVzczwvdGV4dD4KPHJlY3QgeD0iMzcwIiB5PSI2MiIgd2lkdGg9IjQ1MCIgaGVpZ2h0PSIxNTIiIHJ4PSIxMyIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNiIvPgo8dGV4dCB4PSI1OTUiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPk9DSSBRdWV1ZSDCtyBvbmUgcXVldWUgcGVyIGRlY2xhcmVkIFNRUyBxdWV1ZTwvdGV4dD4KPHRleHQgeD0iNTk1IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6MTBweCAnU0YgTW9ubycsTWVubG8sbW9ub3NwYWNlO2ZpbGw6ICNjOWNmZDgiPmluIHRoZSBjdXN0b21lcidzIGNvbXBhcnRtZW50PC90ZXh0Pgo8cmVjdCB4PSIzODQiIHk9IjExMCIgd2lkdGg9IjQyMiIgaGVpZ2h0PSI5NCIgcng9IjEwIiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjU5NSIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDA7ZmlsbDogI2M5Y2ZkOCI+cXVldWU6IG9yZGVycyAgKGNsYXNzaWMpPC90ZXh0Pgo8cmVjdCB4PSIzOTgiIHk9IjEzOCIgd2lkdGg9IjM5NCIgaGVpZ2h0PSIyMCIgcng9IjUiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIvPgo8dGV4dCB4PSI1OTUiIHk9IjE1MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6OS41cHggJ1NGIE1vbm8nLE1lbmxvLG1vbm9zcGFjZTtmaWxsOiAjYzljZmQ4Ij5uYW1lID0gb3JkZXJzICAgIGRlZmF1bHQgdmlzaWJpbGl0eSA9IDMwIHM8L3RleHQ+CjxyZWN0IHg9IjM5OCIgeT0iMTYyIiB3aWR0aD0iMzk0IiBoZWlnaHQ9IjIwIiByeD0iNSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2Ii8+Cjx0ZXh0IHg9IjU5NSIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDo5cHggJ1NGIE1vbm8nLE1lbmxvLG1vbm9zcGFjZTtmaWxsOiAjYzljZmQ4Ij5yZXRlbnRpb24gPSA0IGRheXMgKDM0NTYwMCBzKSDCtyByZWRyaXZlIHRocmVzaG9sZCA9IDU8L3RleHQ+Cjx0ZXh0IHg9IjU5NSIgeT0iMTk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+T3JhY2xlIG9wZXJhdGVzIGR1cmFiaWxpdHkgwrcgYmFja3VwIMK3IEhBPC90ZXh0Pgo8L3N2Zz4=" alt="Architecture: the app's SQS SDK calls a Tensor9 adapter, which serves the SQS API from OCI Queue using workload identity. Each declared SQS queue is provisioned as one OCI queue in the customer's compartment, with its name, default visibility, retention and redrive threshold. OCI Queue stores receipt tokens, receive counts and visibility deadlines." />
</div>

<p className="t9-caption">Each SQS queue maps to an OCI queue in the customer's compartment. OCI Queue stores receipt tokens, receive counts and visibility deadlines.</p>

#### Receiving messages

A `ReceiveMessage` is a **bounded long-poll**. `WaitTimeSeconds` (capped at 20, the SQS maximum) maps to OCI Queue's **get long-poll timeout**, which itself allows up to 30 seconds, so the full SQS wait range passes through with **no clamp**. Each get pulls up to 10 messages : SQS caps a receive at 10, and although OCI Queue itself would return up to 20 the adapter honors the SQS contract. The per-receive **visibility timeout passes straight through** to OCI Queue's per-receive visibility, and OCI Queue applies it when it hands the message out.

The OCI receipt becomes the SQS receipt handle. `ApproximateReceiveCount` uses OCI Queue's delivery count, starting at 1 and increasing on redelivery. The adapter reconstructs the body and attributes and recomputes MD5 checksums for SDK verification. Delivery is at-least-once with best-effort ordering. Single sends use OCI put; batch sends use a multi-message put with a result for each entry. Deletion uses the receipt. Use OCI monitoring for measured latency and throughput.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpdmUgaXMgYSBib3VuZGVkIGxvbmctcG9sbDogV2FpdFRpbWVTZWNvbmRzIGlzIGNhcHBlZCBhdCAyMCBhbmQgbWFwcyB0byBPQ0kgUXVldWUncyBnZXQgbG9uZy1wb2xsIHRpbWVvdXQsIHdoaWNoIGl0c2VsZiBhbGxvd3MgdXAgdG8gMzAgc2Vjb25kcywgc28gdGhlIGZ1bGwgU1FTIHJhbmdlIHBhc3NlcyB3aXRoIG5vIGNsYW1wLiBFYWNoIGdldCBwdWxscyB1cCB0byB0ZW4gbWVzc2FnZXM7IE9DSSBRdWV1ZSByZXR1cm5zIGVhY2ggd2l0aCBhIG5hdGl2ZSByZWNlaXB0IGFuZCBhIGRlbGl2ZXJ5IGNvdW50LCB3aGljaCBtYXAgZGlyZWN0bHkgdG8gdGhlIFNRUyByZWNlaXB0IGhhbmRsZSBhbmQgQXBwcm94aW1hdGVSZWNlaXZlQ291bnQsIHdpdGggZGVsaXZlcnkgYXQtbGVhc3Qtb25jZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPG1hcmtlciBpZD0icmciIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzA1OTY2OSIvPjwvbWFya2VyPgo8L2RlZnM+CjxjaXJjbGUgY3g9IjQwIiBjeT0iNjAiIHI9IjEzIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PHRleHQgeD0iNDAiIHk9IjY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPjE8L3RleHQ+CjxyZWN0IHg9IjYyIiB5PSI0MiIgd2lkdGg9IjI5MCIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSI2MiIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMi41cHgiPkxvbmctcG9sbDogV2FpdFRpbWVTZWNvbmRzIOKJpCAyMCBzPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iNzkiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5tYXBzIHRvIE9DSSBRdWV1ZSBnZXQgbG9uZy1wb2xsIOKJpCAzMCBzIOKGkiBubyBjbGFtcDwvdGV4dD4KPGxpbmUgeDE9IjE4MCIgeTE9IjkwIiB4Mj0iMTgwIiB5Mj0iMTEyIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI3JhKSIvPgo8Y2lyY2xlIGN4PSI0MCIgY3k9IjEzNCIgcj0iMTMiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48dGV4dCB4PSI0MCIgeT0iMTM4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPjI8L3RleHQ+CjxyZWN0IHg9IjYyIiB5PSIxMTYiIHdpZHRoPSIyOTAiIGhlaWdodD0iNDgiIHJ4PSIxMCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI3NiIgeT0iMTM2IiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEyLjVweCI+Z2V0IG1lc3NhZ2VzLCB1cCB0byAxMDwvdGV4dD4KPHRleHQgeD0iNzYiIHk9IjE1MyIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPlNRUyBjYXBzIDEwOyBPQ0kgUXVldWUgYWxsb3dzIDIwLCBTUVMgaG9ub3JlZDwvdGV4dD4KPGxpbmUgeDE9IjE4MCIgeTE9IjE2NCIgeDI9IjE4MCIgeTI9IjE4NiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNyYSkiLz4KPGNpcmNsZSBjeD0iNDAiIGN5PSIyMDgiIHI9IjEzIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PHRleHQgeD0iNDAiIHk9IjIxMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj4zPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iMTkwIiB3aWR0aD0iMjkwIiBoZWlnaHQ9IjQ4IiByeD0iMTAiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzYiIHk9IjIxMCIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMi41cHgiPk9DSSBhcHBsaWVzIHRoZSB2aXNpYmlsaXR5IHRpbWVvdXQ8L3RleHQ+Cjx0ZXh0IHg9Ijc2IiB5PSIyMjciIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPmRlbGl2ZXJ5IGNvdW50IGluY3JlbWVudGVkIMK3IHJlY2VpcHQgaGFuZGVkIGJhY2s8L3RleHQ+CjxsaW5lIHgxPSIzNTIiIHkxPSIyMTQiIHgyPSIzOTIiIHkyPSIxNTAiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcmcpIi8+CjxyZWN0IHg9IjM5NCIgeT0iNzAiIHdpZHRoPSI0MTgiIGhlaWdodD0iODgiIHJ4PSIxMSIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI2MDMiIHk9IjkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPm1lc3NhZ2UgYW5kIHJlY2VpcHQgZnJvbSBPQ0kgUXVldWU8L3RleHQ+Cjx0ZXh0IHg9IjYwMyIgeT0iMTEyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZmlsbDojMDQ3ODU3Ij5tZXNzYWdlLWlkIMK3IGJvZHkgwrcgYXR0cmlidXRlczwvdGV4dD4KPHRleHQgeD0iNjAzIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmaWxsOiMwNDc4NTciPnJlY2VpcHQgIOKGkiAgU1FTIHJlY2VpcHQgaGFuZGxlPC90ZXh0Pgo8dGV4dCB4PSI2MDMiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzA0Nzg1NyI+ZGVsaXZlcnkgY291bnQgIOKGkiAgQXBwcm94aW1hdGVSZWNlaXZlQ291bnQ8L3RleHQ+CjxyZWN0IHg9IjM5NCIgeT0iMTcyIiB3aWR0aD0iNDE4IiBoZWlnaHQ9IjQ0IiByeD0iMTEiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNjAzIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5hdC1sZWFzdC1vbmNlLCBiZXN0LWVmZm9ydCBvcmRlcjogdGhlIFNRUyBzdGFuZGFyZC1xdWV1ZSBjb250cmFjdDwvdGV4dD4KPC9zdmc+" alt="A receive is a bounded long-poll: WaitTimeSeconds is capped at 20 and maps to OCI Queue's get long-poll timeout, which itself allows up to 30 seconds, so the full SQS range passes with no clamp. Each get pulls up to ten messages; OCI Queue returns each with a native receipt and a delivery count, which map directly to the SQS receipt handle and ApproximateReceiveCount, with delivery at-least-once." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpdmUgaXMgYSBib3VuZGVkIGxvbmctcG9sbDogV2FpdFRpbWVTZWNvbmRzIGlzIGNhcHBlZCBhdCAyMCBhbmQgbWFwcyB0byBPQ0kgUXVldWUncyBnZXQgbG9uZy1wb2xsIHRpbWVvdXQsIHdoaWNoIGl0c2VsZiBhbGxvd3MgdXAgdG8gMzAgc2Vjb25kcywgc28gdGhlIGZ1bGwgU1FTIHJhbmdlIHBhc3NlcyB3aXRoIG5vIGNsYW1wLiBFYWNoIGdldCBwdWxscyB1cCB0byB0ZW4gbWVzc2FnZXM7IE9DSSBRdWV1ZSByZXR1cm5zIGVhY2ggd2l0aCBhIG5hdGl2ZSByZWNlaXB0IGFuZCBhIGRlbGl2ZXJ5IGNvdW50LCB3aGljaCBtYXAgZGlyZWN0bHkgdG8gdGhlIFNRUyByZWNlaXB0IGhhbmRsZSBhbmQgQXBwcm94aW1hdGVSZWNlaXZlQ291bnQsIHdpdGggZGVsaXZlcnkgYXQtbGVhc3Qtb25jZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+CjxtYXJrZXIgaWQ9InJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj4KPG1hcmtlciBpZD0icmciIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzIwZjdiNCIvPjwvbWFya2VyPgo8L2RlZnM+CjxjaXJjbGUgY3g9IjQwIiBjeT0iNjAiIHI9IjEzIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PHRleHQgeD0iNDAiIHk9IjY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPjE8L3RleHQ+CjxyZWN0IHg9IjYyIiB5PSI0MiIgd2lkdGg9IjI5MCIgaGVpZ2h0PSI0OCIgcng9IjEwIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9Ijc2IiB5PSI2MiIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMi41cHgiPkxvbmctcG9sbDogV2FpdFRpbWVTZWNvbmRzIOKJpCAyMCBzPC90ZXh0Pgo8dGV4dCB4PSI3NiIgeT0iNzkiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5tYXBzIHRvIE9DSSBRdWV1ZSBnZXQgbG9uZy1wb2xsIOKJpCAzMCBzIOKGkiBubyBjbGFtcDwvdGV4dD4KPGxpbmUgeDE9IjE4MCIgeTE9IjkwIiB4Mj0iMTgwIiB5Mj0iMTEyIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI3JhKSIvPgo8Y2lyY2xlIGN4PSI0MCIgY3k9IjEzNCIgcj0iMTMiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz48dGV4dCB4PSI0MCIgeT0iMTM4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPjI8L3RleHQ+CjxyZWN0IHg9IjYyIiB5PSIxMTYiIHdpZHRoPSIyOTAiIGhlaWdodD0iNDgiIHJ4PSIxMCIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI3NiIgeT0iMTM2IiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEyLjVweCI+Z2V0IG1lc3NhZ2VzLCB1cCB0byAxMDwvdGV4dD4KPHRleHQgeD0iNzYiIHk9IjE1MyIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPlNRUyBjYXBzIDEwOyBPQ0kgUXVldWUgYWxsb3dzIDIwLCBTUVMgaG9ub3JlZDwvdGV4dD4KPGxpbmUgeDE9IjE4MCIgeTE9IjE2NCIgeDI9IjE4MCIgeTI9IjE4NiIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNyYSkiLz4KPGNpcmNsZSBjeD0iNDAiIGN5PSIyMDgiIHI9IjEzIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+PHRleHQgeD0iNDAiIHk9IjIxMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj4zPC90ZXh0Pgo8cmVjdCB4PSI2MiIgeT0iMTkwIiB3aWR0aD0iMjkwIiBoZWlnaHQ9IjQ4IiByeD0iMTAiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzYiIHk9IjIxMCIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMi41cHgiPk9DSSBhcHBsaWVzIHRoZSB2aXNpYmlsaXR5IHRpbWVvdXQ8L3RleHQ+Cjx0ZXh0IHg9Ijc2IiB5PSIyMjciIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmRlbGl2ZXJ5IGNvdW50IGluY3JlbWVudGVkIMK3IHJlY2VpcHQgaGFuZGVkIGJhY2s8L3RleHQ+CjxsaW5lIHgxPSIzNTIiIHkxPSIyMTQiIHgyPSIzOTIiIHkyPSIxNTAiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjcmcpIi8+CjxyZWN0IHg9IjM5NCIgeT0iNzAiIHdpZHRoPSI0MTgiIGhlaWdodD0iODgiIHJ4PSIxMSIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI2MDMiIHk9IjkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPm1lc3NhZ2UgYW5kIHJlY2VpcHQgZnJvbSBPQ0kgUXVldWU8L3RleHQ+Cjx0ZXh0IHg9IjYwMyIgeT0iMTEyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzkwZGVjOCI+bWVzc2FnZS1pZCDCtyBib2R5IMK3IGF0dHJpYnV0ZXM8L3RleHQ+Cjx0ZXh0IHg9IjYwMyIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzkwZGVjOCI+cmVjZWlwdCAg4oaSICBTUVMgcmVjZWlwdCBoYW5kbGU8L3RleHQ+Cjx0ZXh0IHg9IjYwMyIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzkwZGVjOCI+ZGVsaXZlcnkgY291bnQgIOKGkiAgQXBwcm94aW1hdGVSZWNlaXZlQ291bnQ8L3RleHQ+CjxyZWN0IHg9IjM5NCIgeT0iMTcyIiB3aWR0aD0iNDE4IiBoZWlnaHQ9IjQ0IiByeD0iMTEiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNjAzIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5hdC1sZWFzdC1vbmNlLCBiZXN0LWVmZm9ydCBvcmRlcjogdGhlIFNRUyBzdGFuZGFyZC1xdWV1ZSBjb250cmFjdDwvdGV4dD4KPC9zdmc+" alt="A receive is a bounded long-poll: WaitTimeSeconds is capped at 20 and maps to OCI Queue's get long-poll timeout, which itself allows up to 30 seconds, so the full SQS range passes with no clamp. Each get pulls up to ten messages; OCI Queue returns each with a native receipt and a delivery count, which map directly to the SQS receipt handle and ApproximateReceiveCount, with delivery at-least-once." />
</div>

<p className="t9-caption">A receive is a bounded long-poll that returns OCI Queue's own receipt and delivery count; there is no lock to renew. ApproximateReceiveCount is the real delivery count, counted from 1.</p>

#### Receipt handles & visibility

The receipt handle contains OCI Queue's receipt token. Delete and visibility updates use this token across calls, connections and adapter restarts. A receipt superseded by another receive, or belonging to an already deleted message, produces a successful no-op. Malformed handles and handles for another queue return `ReceiptHandleIsInvalid`.

The **visibility timeout maps to OCI Queue's per-message visibility**. The queue's default is provisioned on the OCI queue, and OCI Queue's 30-second default equals the SQS default , so an unset queue matches SQS exactly. The per-receive `VisibilityTimeout` rides the get, and `ChangeMessageVisibility` maps to **update**, which re-stamps the message's visibility; a zero-second change surfaces the message for **immediate re-claim**, and SQS's 12-hour maximum sits at OCI Queue's own **12-hour ceiling**, so the full SQS range passes through with **no clamp**. Because deletion and visibility changes use the native `receipt`, a consumer that lost its claim to a redelivery finds its `receipt` superseded, and the update no-ops rather than corrupting another consumer's claim.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpcHQgaGFuZGxlIGlzIE9DSSBRdWV1ZSdzIG93biByZWNlaXB0LCB3aXRoIG5vIGJyb2tlciBsb2NrIG9yIGluLW1lbW9yeSByZWdpc3RyeSBiZWhpbmQgaXQsIHNvIGl0IHJlc29sdmVzIHRoZSBzYW1lIGFmdGVyIHRoZSBhZGFwdGVyIHJlc3RhcnRzLiBWaXNpYmlsaXR5IGlzIHBlci1tZXNzYWdlOiBPQ0kgUXVldWUncyAzMC1zZWNvbmQgZGVmYXVsdCBlcXVhbHMgdGhlIFNRUyBkZWZhdWx0IGFuZCBTUVMncyAxMi1ob3VyIG1heGltdW0gc2l0cyBhdCBPQ0kgUXVldWUncyAxMi1ob3VyIGNlaWxpbmcsIHNvIENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5IHVwZGF0ZXMgdmlzaWJpbGl0eSB3aXRoIG5vIGNsYW1wLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8dGV4dCB4PSIyNiIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPlNUQVRFTEVTUyBSRUNFSVBUIEhBTkRMRTwvdGV4dD4KPHJlY3QgeD0iMjYiIHk9IjM4IiB3aWR0aD0iMzYwIiBoZWlnaHQ9IjE0MiIgcng9IjE0IiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+CjxyZWN0IHg9IjQ0IiB5PSI1OCIgd2lkdGg9IjMyNCIgaGVpZ2h0PSIzNCIgcng9IjgiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMjA2IiB5PSI4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1Njk7IGZpbGw6IzA0Nzg1NyI+cmVjZWlwdCBoYW5kbGUgKG9wYXF1ZSB0b2tlbik8L3RleHQ+Cjx0ZXh0IHg9IjIwNiIgeT0iMTEyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+cGxhaW4gZGF0YSwgbm8gbG9jayB0YWJsZSBiZWhpbmQgaXQ8L3RleHQ+CjxsaW5lIHgxPSIyMDYiIHkxPSIxMjAiIHgyPSIyMDYiIHkyPSIxMzYiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIxLjYiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMyIvPgo8dGV4dCB4PSIyMDYiIHk9IjE0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj4oYWRhcHRlciByZXN0YXJ0cyk8L3RleHQ+Cjx0ZXh0IHg9IjIwNiIgeT0iMTY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNTk2NjkiPkRlbGV0ZSAvIENoYW5nZVZpc2liaWxpdHkgdXNlIHRoZSBzYXZlZCByZWNlaXB0PC90ZXh0Pgo8bGluZSB4MT0iMzk4IiB5MT0iMzQiIHgyPSIzOTgiIHkyPSIxODQiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iNDI0IiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzY0NzQ4YiI+UEVSLU1FU1NBR0UgVklTSUJJTElUWTwvdGV4dD4KPHJlY3QgeD0iNDI0IiB5PSIzOCIgd2lkdGg9IjM4NiIgaGVpZ2h0PSIxNDIiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8bGluZSB4MT0iNDQ2IiB5MT0iMTA0IiB4Mj0iODA2IiB5Mj0iMTA0IiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMiIvPgo8cmVjdCB4PSI0NDYiIHk9Ijg4IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE4IiByeD0iNCIgZmlsbD0iI2E3ZjNkMCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEiLz4KPHRleHQgeD0iNTIxIiB5PSI4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGI7IGZpbGw6IzA1OTY2OSI+U1FTIG1heCAxMmg8L3RleHQ+Cjx0ZXh0IHg9IjY3NiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5hdCB0aGUgY2VpbGluZywgbm8gY2xhbXA8L3RleHQ+CjxsaW5lIHgxPSI3NzAiIHkxPSI3MCIgeDI9Ijc3MCIgeTI9IjEyMCIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIuNSIvPgo8dGV4dCB4PSI3OTgiIHk9IjY0IiB0ZXh0LWFuY2hvcj0iZW5kIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZmlsbDojYjQ1MzA5Ij5PQ0kgbWF4aW11bTogMTJoPC90ZXh0Pgo8dGV4dCB4PSI2MTciIHk9IjE0MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPkNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5IOKGkiB1cGRhdGUgcmUtc3RhbXBzIHRoZSB2aXNpYmlsaXR5IHRpbWVvdXQ8L3RleHQ+Cjx0ZXh0IHg9IjYxNyIgeT0iMTYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZmlsbDojNjQ3NDhiIj5kZWZhdWx0IHZpc2liaWxpdHk6IDMwcyDCtyBzdGFsZSByZWNlaXB0OiBuby1vcDwvdGV4dD4KPC9zdmc+" alt="A receipt handle is OCI Queue's own receipt, with no broker lock or in-memory registry behind it, so it resolves the same after the adapter restarts. Visibility is per-message: OCI Queue's 30-second default equals the SQS default and SQS's 12-hour maximum sits at OCI Queue's 12-hour ceiling, so ChangeMessageVisibility updates visibility with no clamp." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHJlY2VpcHQgaGFuZGxlIGlzIE9DSSBRdWV1ZSdzIG93biByZWNlaXB0LCB3aXRoIG5vIGJyb2tlciBsb2NrIG9yIGluLW1lbW9yeSByZWdpc3RyeSBiZWhpbmQgaXQsIHNvIGl0IHJlc29sdmVzIHRoZSBzYW1lIGFmdGVyIHRoZSBhZGFwdGVyIHJlc3RhcnRzLiBWaXNpYmlsaXR5IGlzIHBlci1tZXNzYWdlOiBPQ0kgUXVldWUncyAzMC1zZWNvbmQgZGVmYXVsdCBlcXVhbHMgdGhlIFNRUyBkZWZhdWx0IGFuZCBTUVMncyAxMi1ob3VyIG1heGltdW0gc2l0cyBhdCBPQ0kgUXVldWUncyAxMi1ob3VyIGNlaWxpbmcsIHNvIENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5IHVwZGF0ZXMgdmlzaWJpbGl0eSB3aXRoIG5vIGNsYW1wLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8dGV4dCB4PSIyNiIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5TVEFURUxFU1MgUkVDRUlQVCBIQU5ETEU8L3RleHQ+CjxyZWN0IHg9IjI2IiB5PSIzOCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIxNDIiIHJ4PSIxNCIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8cmVjdCB4PSI0NCIgeT0iNTgiIHdpZHRoPSIzMjQiIGhlaWdodD0iMzQiIHJ4PSI4IiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjIwNiIgeT0iODAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTBkZWM4Ij5yZWNlaXB0IGhhbmRsZSAob3BhcXVlIHRva2VuKTwvdGV4dD4KPHRleHQgeD0iMjA2IiB5PSIxMTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5wbGFpbiBkYXRhLCBubyBsb2NrIHRhYmxlIGJlaGluZCBpdDwvdGV4dD4KPGxpbmUgeDE9IjIwNiIgeTE9IjEyMCIgeDI9IjIwNiIgeTI9IjEzNiIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjEuNiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAzIi8+Cjx0ZXh0IHg9IjIwNiIgeT0iMTQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPihhZGFwdGVyIHJlc3RhcnRzKTwvdGV4dD4KPHRleHQgeD0iMjA2IiB5PSIxNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjNiI+RGVsZXRlIC8gQ2hhbmdlVmlzaWJpbGl0eSB1c2UgdGhlIHNhdmVkIHJlY2VpcHQ8L3RleHQ+CjxsaW5lIHgxPSIzOTgiIHkxPSIzNCIgeDI9IjM5OCIgeTI9IjE4NCIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI0MjQiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogI2M5Y2ZkOCI+UEVSLU1FU1NBR0UgVklTSUJJTElUWTwvdGV4dD4KPHJlY3QgeD0iNDI0IiB5PSIzOCIgd2lkdGg9IjM4NiIgaGVpZ2h0PSIxNDIiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8bGluZSB4MT0iNDQ2IiB5MT0iMTA0IiB4Mj0iODA2IiB5Mj0iMTA0IiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMiIvPgo8cmVjdCB4PSI0NDYiIHk9Ijg4IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE4IiByeD0iNCIgZmlsbD0iIzFhMzEyNyIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEiLz4KPHRleHQgeD0iNTIxIiB5PSI4MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICM5MGRlYzYiPlNRUyBtYXggMTJoPC90ZXh0Pgo8dGV4dCB4PSI2NzYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+YXQgdGhlIGNlaWxpbmcsIG5vIGNsYW1wPC90ZXh0Pgo8bGluZSB4MT0iNzcwIiB5MT0iNzAiIHgyPSI3NzAiIHkyPSIxMjAiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyLjUiLz4KPHRleHQgeD0iNzk4IiB5PSI2NCIgdGV4dC1hbmNob3I9ImVuZCIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNkZWIyOTAiPk9DSSBtYXhpbXVtOiAxMmg8L3RleHQ+Cjx0ZXh0IHg9IjYxNyIgeT0iMTQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHkg4oaSIHVwZGF0ZSByZS1zdGFtcHMgdGhlIHZpc2liaWxpdHkgdGltZW91dDwvdGV4dD4KPHRleHQgeD0iNjE3IiB5PSIxNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjYzljZmQ4Ij5kZWZhdWx0IHZpc2liaWxpdHk6IDMwcyDCtyBzdGFsZSByZWNlaXB0OiBuby1vcDwvdGV4dD4KPC9zdmc+" alt="A receipt handle is OCI Queue's own receipt, with no broker lock or in-memory registry behind it, so it resolves the same after the adapter restarts. Visibility is per-message: OCI Queue's 30-second default equals the SQS default and SQS's 12-hour maximum sits at OCI Queue's 12-hour ceiling, so ChangeMessageVisibility updates visibility with no clamp." />
</div>

<p className="t9-caption">OCI Queue stores delivery state and accepts a current receipt across adapter restarts. The 30-second visibility default and 12-hour maximum match SQS.</p>

#### Dead-letter & retention

`maxReceiveCount` sets the queue's delivery-count threshold. When the count exceeds it, OCI Queue moves the message to its built-in dead-letter queue. The adapter does not copy or delete messages to perform that move. The threshold is preserved, but the destination is always the built-in dead-letter queue; an arbitrary SQS queue name or ARN cannot select a different destination.

During Terraform provisioning, Tensor9 explicitly sets the four-day retention default (`345600` seconds) when no value is declared. A declared value above OCI's seven-day maximum (`604800` seconds) is capped at seven days with a warning. A queue declared with SQS's 14-day retention therefore expires messages a week earlier. This is a provisioning conversion; it does not describe a runtime `SetQueueAttributes` request.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjIwIiB2aWV3Qm94PSIwIDAgODM2IDIyMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJEZWFkLWxldHRlciBhbmQgcmV0ZW50aW9uLiBMZWZ0OiB0aGUgU1FTIHJlZHJpdmUgbWF4UmVjZWl2ZUNvdW50IG1hcHMgdG8gdGhlIHF1ZXVlJ3MgZGVsaXZlcnktY291bnQgdGhyZXNob2xkLCBhbmQgb25jZSBhIG1lc3NhZ2UncyBkZWxpdmVyeSBjb3VudCBjcm9zc2VzIGl0IE9DSSBRdWV1ZSBtb3ZlcyB0aGUgbWVzc2FnZSB0byBpdHMgb3duIGJ1aWx0LWluIGRlYWQtbGV0dGVyIHF1ZXVlIG5hdGl2ZWx5LCB0aGUgYWRhcHRlciBtb3ZlcyBub3RoaW5nIGJ5IGhhbmQuIFJpZ2h0OiBTUVMgbWVzc2FnZSByZXRlbnRpb24gbWFwcyB0byBPQ0kgUXVldWUncyByZXRlbnRpb24sIHRoZSBTUVMgZm91ci1kYXkgZGVmYXVsdCAzNDU2MDAgaXMgZW1pdHRlZCBleHBsaWNpdGx5LCBhbmQgT0NJIFF1ZXVlJ3Mgc2V2ZW4tZGF5IG1heGltdW0gNjA0ODAwIGNhcHMgYSBsb25nZXIgc2V0dGluZywgc28gYSBtZXNzYWdlIHNldCB0byBTUVMncyAxNC1kYXkgcmV0ZW50aW9uIGFnZXMgb3V0IHVwIHRvIGEgd2VlayBlYXJsaWVyLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0iZHgiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzA1OTY2OSIvPjwvbWFya2VyPgo8L2RlZnM+Cjx0ZXh0IHg9IjI2IiB5PSIyNCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+REVBRC1MRVRURVIgQlkgREVMSVZFUlkgQ09VTlQ8L3RleHQ+CjxyZWN0IHg9IjIwIiB5PSIzNCIgd2lkdGg9IjM4NCIgaGVpZ2h0PSIxNzIiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8cmVjdCB4PSI0NCIgeT0iNTYiIHdpZHRoPSIxNTAiIGhlaWdodD0iNDYiIHJ4PSIxMCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIxMTkiIHk9Ijc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExcHgiPmRlbGl2ZXJ5IGNvdW50PC90ZXh0Pgo8dGV4dCB4PSIxMTkiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZmlsbDojNDc1NTY5Ij4mZ3Q7IG1heFJlY2VpdmVDb3VudDwvdGV4dD4KPGxpbmUgeDE9IjE5NCIgeTE9Ijc5IiB4Mj0iMjI4IiB5Mj0iNzkiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjZHgpIi8+CjxyZWN0IHg9IjIzMCIgeT0iNTYiIHdpZHRoPSIxNTQiIGhlaWdodD0iNDYiIHJ4PSIxMCIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSIzMDciIHk9Ijc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjExcHgiPmJ1aWx0LWluIGRlYWQtbGV0dGVyPC90ZXh0Pgo8dGV4dCB4PSIzMDciIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5PQ0kgUXVldWUgbW92ZXMgaXQ8L3RleHQ+Cjx0ZXh0IHg9IjQ0IiB5PSIxMzAiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj50aGUgY291bnQgbWFwcyB0byBPQ0kgUXVldWUncyBkZWxpdmVyeS1jb3VudCB0aHJlc2hvbGQ7PC90ZXh0Pgo8dGV4dCB4PSI0NCIgeT0iMTQ4IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+T0NJIFF1ZXVlIHBlcmZvcm1zIHRoZSBtb3ZlIGl0c2VsZiwgbmF0aXZlbHksPC90ZXh0Pgo8dGV4dCB4PSI0NCIgeT0iMTY2IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZmlsbDojOTRhM2I4Ij5ieSBkZWxpdmVyeSBjb3VudCwgbm90IHRvIGFuIGFyYml0cmFyeSBuYW1lZCB0YXJnZXQ8L3RleHQ+Cjx0ZXh0IHg9IjIxMiIgeT0iMTkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDA7ZmlsbDojMDQ3ODU3Ij5PQ0kgaGFuZGxlcyBkZWFkLWxldHRlciBkZWxpdmVyeTwvdGV4dD4KPGxpbmUgeDE9IjQxNiIgeTE9IjMwIiB4Mj0iNDE2IiB5Mj0iMjA2IiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjQzMiIgeT0iMjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiNiNDUzMDkiPlJFVEVOVElPTjogNy1EQVkgTUFYSU1VTTwvdGV4dD4KPHJlY3QgeD0iNDI4IiB5PSIzNCIgd2lkdGg9IjM4NCIgaGVpZ2h0PSIxNzIiIHJ4PSIxNCIgZmlsbD0iI2ZmZmJlYiIgc3Ryb2tlPSIjZmRlNjhhIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8bGluZSB4MT0iNDUyIiB5MT0iOTYiIHgyPSI4MDAiIHkyPSI5NiIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjIiLz4KPHJlY3QgeD0iNDUyIiB5PSI4MCIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxOCIgcng9IjQiIGZpbGw9IiNhN2YzZDAiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxIi8+Cjx0ZXh0IHg9IjUyNyIgeT0iNzIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiMwNTk2NjkiPlNRUyA0ZCBkZWZhdWx0IDM0NTYwMDwvdGV4dD4KPGxpbmUgeDE9IjY0MCIgeTE9IjY0IiB4Mj0iNjQwIiB5Mj0iMTEyIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMi41Ii8+Cjx0ZXh0IHg9IjY0MCIgeT0iNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiNiNDUzMDkiPk9DSSA3ZCBtYXggNjA0ODAwPC90ZXh0Pgo8dGV4dCB4PSI3MjYiIHk9IjkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZmlsbDojYjQ1MzA5Ij5TUVMgMTRkIOKGkiBjYXBwZWQ8L3RleHQ+Cjx0ZXh0IHg9IjQ1MiIgeT0iMTM4IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+VGVycmFmb3JtIHNldHMgdGhlIGRlY2xhcmVkIHJldGVudGlvbjs8L3RleHQ+Cjx0ZXh0IHg9IjQ1MiIgeT0iMTU2IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+dGhlIDQtZGF5IGRlZmF1bHQgaXMgd3JpdHRlbiBvdXQgZXhwbGljaXRseSwgYW5kIGE8L3RleHQ+Cjx0ZXh0IHg9IjQ1MiIgeT0iMTc0IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZmlsbDojYjQ1MzA5Ij52YWx1ZSBvdmVyIDcgZGF5cyBiZWNvbWVzIDYwNDgwMCwgd2l0aCBhIHdhcm5pbmc8L3RleHQ+Cjwvc3ZnPg==" alt="Dead-letter and retention. Left: the SQS redrive maxReceiveCount maps to the queue's delivery-count threshold, and once a message's delivery count crosses it OCI Queue moves the message to its own built-in dead-letter queue natively, the adapter moves nothing by hand. Right: SQS message retention maps to OCI Queue's retention, the SQS four-day default 345600 is emitted explicitly, and OCI Queue's seven-day maximum 604800 caps a longer setting, so a message set to SQS's 14-day retention ages out up to a week earlier." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjIwIiB2aWV3Qm94PSIwIDAgODM2IDIyMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJEZWFkLWxldHRlciBhbmQgcmV0ZW50aW9uLiBMZWZ0OiB0aGUgU1FTIHJlZHJpdmUgbWF4UmVjZWl2ZUNvdW50IG1hcHMgdG8gdGhlIHF1ZXVlJ3MgZGVsaXZlcnktY291bnQgdGhyZXNob2xkLCBhbmQgb25jZSBhIG1lc3NhZ2UncyBkZWxpdmVyeSBjb3VudCBjcm9zc2VzIGl0IE9DSSBRdWV1ZSBtb3ZlcyB0aGUgbWVzc2FnZSB0byBpdHMgb3duIGJ1aWx0LWluIGRlYWQtbGV0dGVyIHF1ZXVlIG5hdGl2ZWx5LCB0aGUgYWRhcHRlciBtb3ZlcyBub3RoaW5nIGJ5IGhhbmQuIFJpZ2h0OiBTUVMgbWVzc2FnZSByZXRlbnRpb24gbWFwcyB0byBPQ0kgUXVldWUncyByZXRlbnRpb24sIHRoZSBTUVMgZm91ci1kYXkgZGVmYXVsdCAzNDU2MDAgaXMgZW1pdHRlZCBleHBsaWNpdGx5LCBhbmQgT0NJIFF1ZXVlJ3Mgc2V2ZW4tZGF5IG1heGltdW0gNjA0ODAwIGNhcHMgYSBsb25nZXIgc2V0dGluZywgc28gYSBtZXNzYWdlIHNldCB0byBTUVMncyAxNC1kYXkgcmV0ZW50aW9uIGFnZXMgb3V0IHVwIHRvIGEgd2VlayBlYXJsaWVyLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz4KPG1hcmtlciBpZD0iZHgiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzIwZjdiNCIvPjwvbWFya2VyPgo8L2RlZnM+Cjx0ZXh0IHg9IjI2IiB5PSIyNCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPkRFQUQtTEVUVEVSIEJZIERFTElWRVJZIENPVU5UPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iMzQiIHdpZHRoPSIzODQiIGhlaWdodD0iMTcyIiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHJlY3QgeD0iNDQiIHk9IjU2IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjQ2IiByeD0iMTAiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iMTE5IiB5PSI3NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMXB4Ij5kZWxpdmVyeSBjb3VudDwvdGV4dD4KPHRleHQgeD0iMTE5IiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNjOWNmZDgiPiZndDsgbWF4UmVjZWl2ZUNvdW50PC90ZXh0Pgo8bGluZSB4MT0iMTk0IiB5MT0iNzkiIHgyPSIyMjgiIHkyPSI3OSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNkeCkiLz4KPHJlY3QgeD0iMjMwIiB5PSI1NiIgd2lkdGg9IjE1NCIgaGVpZ2h0PSI0NiIgcng9IjEwIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjMwNyIgeT0iNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTFweCI+YnVpbHQtaW4gZGVhZC1sZXR0ZXI8L3RleHQ+Cjx0ZXh0IHg9IjMwNyIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPk9DSSBRdWV1ZSBtb3ZlcyBpdDwvdGV4dD4KPHRleHQgeD0iNDQiIHk9IjEzMCIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnRoZSBjb3VudCBtYXBzIHRvIE9DSSBRdWV1ZSdzIGRlbGl2ZXJ5LWNvdW50IHRocmVzaG9sZDs8L3RleHQ+Cjx0ZXh0IHg9IjQ0IiB5PSIxNDgiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5PQ0kgUXVldWUgcGVyZm9ybXMgdGhlIG1vdmUgaXRzZWxmLCBuYXRpdmVseSw8L3RleHQ+Cjx0ZXh0IHg9IjQ0IiB5PSIxNjYiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTRhM2I4Ij5ieSBkZWxpdmVyeSBjb3VudCwgbm90IHRvIGFuIGFyYml0cmFyeSBuYW1lZCB0YXJnZXQ8L3RleHQ+Cjx0ZXh0IHg9IjIxMiIgeT0iMTkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDA7ZmlsbDogIzkwZGVjOCI+T0NJIGhhbmRsZXMgZGVhZC1sZXR0ZXIgZGVsaXZlcnk8L3RleHQ+CjxsaW5lIHgxPSI0MTYiIHkxPSIzMCIgeDI9IjQxNiIgeTI9IjIwNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSI0MzIiIHk9IjI0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogI2RlYjI5MCI+UkVURU5USU9OOiA3LURBWSBNQVhJTVVNPC90ZXh0Pgo8cmVjdCB4PSI0MjgiIHk9IjM0IiB3aWR0aD0iMzg0IiBoZWlnaHQ9IjE3MiIgcng9IjE0IiBmaWxsPSIjMzEyZDFhIiBzdHJva2U9IiM2NjVkM2QiIHN0cm9rZS13aWR0aD0iMS41Ii8+CjxsaW5lIHgxPSI0NTIiIHkxPSI5NiIgeDI9IjgwMCIgeTI9Ijk2IiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMiIvPgo8cmVjdCB4PSI0NTIiIHk9IjgwIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE4IiByeD0iNCIgZmlsbD0iIzFhMzEyNyIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEiLz4KPHRleHQgeD0iNTI3IiB5PSI3MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICM5MGRlYzYiPlNRUyA0ZCBkZWZhdWx0IDM0NTYwMDwvdGV4dD4KPGxpbmUgeDE9IjY0MCIgeTE9IjY0IiB4Mj0iNjQwIiB5Mj0iMTEyIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMi41Ii8+Cjx0ZXh0IHg9IjY0MCIgeT0iNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGViMjkwIj5PQ0kgN2QgbWF4IDYwNDgwMDwvdGV4dD4KPHRleHQgeD0iNzI2IiB5PSI5MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICNkZWIyOTAiPlNRUyAxNGQg4oaSIGNhcHBlZDwvdGV4dD4KPHRleHQgeD0iNDUyIiB5PSIxMzgiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5UZXJyYWZvcm0gc2V0cyB0aGUgZGVjbGFyZWQgcmV0ZW50aW9uOzwvdGV4dD4KPHRleHQgeD0iNDUyIiB5PSIxNTYiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij50aGUgNC1kYXkgZGVmYXVsdCBpcyB3cml0dGVuIG91dCBleHBsaWNpdGx5LCBhbmQgYTwvdGV4dD4KPHRleHQgeD0iNDUyIiB5PSIxNzQiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGViMjkwIj52YWx1ZSBvdmVyIDcgZGF5cyBiZWNvbWVzIDYwNDgwMCwgd2l0aCBhIHdhcm5pbmc8L3RleHQ+Cjwvc3ZnPg==" alt="Dead-letter and retention. Left: the SQS redrive maxReceiveCount maps to the queue's delivery-count threshold, and once a message's delivery count crosses it OCI Queue moves the message to its own built-in dead-letter queue natively, the adapter moves nothing by hand. Right: SQS message retention maps to OCI Queue's retention, the SQS four-day default 345600 is emitted explicitly, and OCI Queue's seven-day maximum 604800 caps a longer setting, so a message set to SQS's 14-day retention ages out up to a week earlier." />
</div>

<p className="t9-caption">OCI Queue moves messages to its built-in dead-letter queue when their delivery count exceeds maxReceiveCount. Terraform provisioning caps retention at 7 days with a warning.</p>

#### Limitations

△ Where SQS and OCI Queue diverge, read before you adopt

* **Classic queues only; FIFO is rejected with an error.** OCI Queue has no ordering, session, or deduplication analog, so a `.fifo` origin is routed to an ordering-capable backend at compile time, and any `.fifo` traffic that still reaches this backend (a pre-declared queue or an out-of-band URL) is rejected with an error on send, receive, create, and purge. There is no message-group ordering and no deduplication here at all.
* **128 KB maximum message, smaller than SQS's 1 MiB.** OCI Queue caps a message at `131072` bytes, against SQS's 1 MiB, so an oversize send is rejected with `InvalidParameterValue` (naming the size and the limit), never silently truncated. If your messages routinely exceed 128 KB, shrink the payload, or use the claim-check pattern (store the body in OCI Object Storage and send a pointer).
* **Retention tops out at 7 days, shorter than SQS's 14.** OCI Queue's retention is set from the SQS retention with the 4-day default (`345600`) written out explicitly, and OCI Queue's 7-day maximum (`604800`) caps a longer setting; a message held to SQS's 14-day retention ages out up to a week earlier, while within 7 days the mapping is exact. See the dead-letter and retention section.
* **Dead-letter is delivery-count based.** The SQS redrive `maxReceiveCount` maps directly to OCI Queue's delivery-count threshold and OCI Queue moves the message to its own built-in dead-letter queue natively; the count travels exactly, but the target is OCI Queue's built-in per-queue dead-letter rather than an arbitrary named queue or ARN.
* **Queue-level delay is not preserved.** During Terraform provisioning, a positive `delay_seconds` is dropped with a warning because OCI Queue has no corresponding setting. Review delayed-delivery requirements before choosing this target.
* **Batch operations use OCI Queue batches.** `SendMessageBatch` and `DeleteMessageBatch` use multi-message put and delete operations with results for each entry. `ApproximateNumberOfMessages` and `ApproximateNumberOfMessagesNotVisible` use OCI Queue's visible and in-flight statistics.
* **Control-plane and provisioning.** Each declared SQS queue is provisioned as one OCI queue in the customer's compartment at apply-time (the queue create is itself keyless); `ListQueues` answers with the declared set, and control operations that would reconfigure a queue out from under the declared model return a real error rather than doing the wrong thing.
* **Single managed queue service; durability is Oracle's.** The data-plane path reaches OCI Queue keylessly via OCI workload identity; Oracle operates OCI Queue's durability, backup, replication, and HA, and Tensor9 operates the adapter.

#### Other considerations

* **In-flight messages don't migrate.** The OCI queue is provisioned empty at apply-time, so anything still sitting in SQS stays on AWS. Drain the SQS queue at the cutover point, or dual-write to both until the SQS side is empty.
* **Check the retention and size limits before cutover.** Queue names, visibility and redrive thresholds map to OCI settings. Provisioning caps retention above 7 days with a warning, and messages above 128 KB are rejected; review queues using SQS's 14-day retention or messages above 128 KB.
* **Estimate cost from OCI requests and message volume.** Include the workload's send, receive and delete rates when estimating target costs.

[Service Catalog](/service-adapters/catalog).
