Skip to content

Queue Storage

Consume and produce Azure Storage queue messages in PowerShell.

Queue Trigger

function.json:

{
  "bindings": [
    {
      "name": "QueueItem",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "work-items",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

run.ps1:

param($QueueItem, $TriggerMetadata)

# JSON messages are deserialized automatically into a Hashtable/PSObject
Write-Information "Processing item $($QueueItem.id)"

Write-Information "Dequeue count: $($TriggerMetadata.DequeueCount)"

Output Queue Binding

Emit messages to another queue:

{
  "name": "OutputQueue",
  "type": "queue",
  "direction": "out",
  "queueName": "results",
  "connection": "AzureWebJobsStorage"
}
Push-OutputBinding -Name OutputQueue -Value (@{ id = $QueueItem.id; status = "done" } | ConvertTo-Json)

Poison Messages

After the runtime exhausts retries (default 5 dequeues), the message moves to <queueName>-poison. Add a trigger on that queue to handle failures:

param($QueueItem, $TriggerMetadata)
Write-Error "Poison message received: $($QueueItem | ConvertTo-Json)"

Idempotency

A message can be delivered more than once. Make handlers idempotent — key writes on a stable message id.

See Also

Sources