# `AzureStorage.Queue`
[🔗](https://github.com/csokun/ex_azure_storage/blob/v0.1.8/lib/azure_storage/azure_queue.ex#L1)

Azure Queue Storage

ref. https://docs.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api

```
{:ok, context} = AzureStorage.create_queue_service("account_name", "account_key")
context |> list_queues()
```

# `create_message`
[🔗](https://github.com/csokun/ex_azure_storage/blob/v0.1.8/lib/azure_storage/azure_queue.ex#L80)

The Put Message operation adds a new message to the back of the message queue.

A visibility timeout can also be specified to make the message invisible until the visibility timeout expires.
A message must be in a format that can be included in an XML request with UTF-8 encoding.
The encoded message can be up to 64 KiB in size for versions 2011-08-18 and newer, or 8 KiB in size for previous versions.

ref. https://docs.microsoft.com/en-us/rest/api/storageservices/put-message

```
context |> create_message("booking-queue", "hello world")
```

# `create_queue`
[🔗](https://github.com/csokun/ex_azure_storage/blob/v0.1.8/lib/azure_storage/azure_queue.ex#L40)

The Create Queue operation creates a queue in a storage account.

ref. https://docs.microsoft.com/en-us/rest/api/storageservices/create-queue4

```
context |> create_queue("booking-queue")
```

# `delete_message`
[🔗](https://github.com/csokun/ex_azure_storage/blob/v0.1.8/lib/azure_storage/azure_queue.ex#L124)

Azure Queue items can be retrieve by calling `get_messages/3`.

However, queue items are not remove from storage. Therefore, client need to send request to delete queue item when it is done processing.

# `delete_queue`
[🔗](https://github.com/csokun/ex_azure_storage/blob/v0.1.8/lib/azure_storage/azure_queue.ex#L58)

The Delete Queue operation permanently deletes the specified queue.

ref. https://docs.microsoft.com/en-us/rest/api/storageservices/delete-queue3

```
context |> delete_queue("booking-queue")
```

# `get_messages`
[🔗](https://github.com/csokun/ex_azure_storage/blob/v0.1.8/lib/azure_storage/azure_queue.ex#L145)

```elixir
@spec get_messages(AzureStorage.Request.Context.t(), String.t(), keyword()) ::
  {:ok, list() | []} | {:error, String.t()}
```

The Get Messages operation retrieves one or more messages from the front of the queue.

ref. https://docs.microsoft.com/en-us/rest/api/storageservices/get-messages

Supported options: 
* `:visibilitytimeout` (`t:integer/0`) - Message visibility timeout in second The default value is `30`.

* `:numofmessages` (`t:integer/0`) - Number of messages to retrieve from the queue, up to a maximum of 32. The default value is `1`.

* `:timeout` (`t:pos_integer/0`) - The default value is `30`.

# `list_queues`
[🔗](https://github.com/csokun/ex_azure_storage/blob/v0.1.8/lib/azure_storage/azure_queue.ex#L22)

```elixir
@spec list_queues(AzureStorage.Request.Context.t()) ::
  {:ok, %{items: list() | [], marker: String.t() | nil}} | {:error, String.t()}
```

This operation lists all of the queues in a given storage account.

# `update_message`
[🔗](https://github.com/csokun/ex_azure_storage/blob/v0.1.8/lib/azure_storage/azure_queue.ex#L103)

Update queue item commonly use for updating queue item visibility timeout as well as queue message body

```
{:ok, messages} = context |> get_messages("booking-queue")
[head | tail] = messages

context |> update_message("booking-queue", head, "hello world!")
```

Supported options: 
* `:visibilitytimeout` (`t:integer/0`) - Message visibility timeout in second The default value is `0`.

* `:messagettl` (`t:integer/0`) - Message time to live in second The default value is `604800`.

* `:timeout` (`t:pos_integer/0`) - The default value is `30`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
