Skip to main content
A receive is a temporary lease. The consumer must acknowledge a message after processing it successfully. If it stops or the lease expires first, another consumer can receive the message. Design the business operation to tolerate that redelivery.

Send and receive

Open the queue and select Send message for a manual publication. The Messages tab lets you inspect messages without acquiring a lease. Run application consumers through the API; peeking is not processing.

Acknowledge or extend the lease

After processing succeeds, delete with the current receipt handle:
An acknowledgement returns HTTP 204. The receipt handle belongs to one receive attempt. A message ID alone cannot acknowledge it. URL-encode the handle when building a request URL and do not log it as harmless metadata. If processing needs longer, update visibility before the current lease expires:
The timeout is measured from the visibility change. Setting it to zero makes the message available again. Do not use an old handle after a new receive; it cannot acknowledge or extend another consumer’s lease.

Attributes, size, and batches

Messages accept up to 20 attributes. Attribute names are 1–256 bytes and values are at most 1,024 bytes. Types are String, Number, or Binary; attribute values are strings on the wire, with standard base64 for Binary values. Body and attribute sizes together must fit the queue’s max_message_bytes setting, up to 256 KiB. Send, delete, and visibility batch operations accept up to ten entries. Entries carry unique caller-chosen IDs so individual successes and failures can be correlated. Check per-entry results and retry only the failed actions. An HTTP success does not imply that all entries succeeded.

Delay, long polling, and empty receives

The queue’s delay applies before first delivery. Standard queue sends can override it with delay_seconds; FIFO sends use the queue’s delay and reject per-message overrides. A delayed message is different from an in-flight message: it has not been leased yet. Use wait_time_seconds up to 20 for long polling, or configure the queue’s default receive_wait_time_seconds. Allow the HTTP client timeout to exceed the chosen wait. An empty receive can mean no available messages, delayed or leased messages, or a FIFO group blocked by an earlier message.

Inspect, purge, and troubleshoot

The peek operation reads message data without changing visibility or receive counts and requires its own permission. It is useful for diagnosis, but cannot reserve a message for processing. Purge deletes messages including active leases. Deleting a queue removes the queue and its messages. Neither operation is an acknowledgement workflow. Watch the Metrics tab: increasing available depth and oldest-message age suggest consumers are falling behind; repeated receives suggest failures or leases that are too short. Inspect receive_count and your consumer logs, then configure a dead-letter queue for poison messages. Missing metric samples are observation gaps, not empty queues.