# Framework

The `Zend_Queue` is a proxy that hides the details of the queue services. The queue services are represented by `Zend_Queue_Adapter_<service>`. For example, `Zend_Queue_Adapter_Db` is a queue that will use database tables to store and retrieve messages.

Below is an example for using database tables for a queuing system:

    $options = array(
        'name'          => 'queue1',
        'driverOptions' => array(
            'host'      => '127.0.0.1',
            'port'      => '3306',
            'username'  => 'queue',
            'password'  => 'queue',
            'dbname'    => 'queue',
            'type'      => 'pdo_mysql'
        )
    );

    // Create a database queue.
    // Zend_Queue will prepend Zend_Queue_Adapter_ to 'Db' for the class name.
    $queue = new Zend_Queue('Db', $options);

The `Zend_Queue` constructor will create a `Zend_Queue_Adapter_Db` and initialize the adapter with the configuration settings.

The accepted configuration settings for each adapter are provided in the adapter notes.

`Zend_Queue` returns messages using the class `Zend_Queue_Message_Iterator`, which is an implementation of SPL `Iterator` and `Countable`. `Zend_Queue_Message_Iterator` contains an array of `Zend_Queue_Message` objects.

    $messages = $queue->receive(5);
    foreach ($messages as $i => $message) {
        echo "$i) Message => ", $message->body, "\n";
    }

Any exceptions thrown are of class `Zend_Queue_Exception`.

## Introduction

`Zend_Queue` is a proxy class that represents an adapter.

The `send()`, `count($queue)`, and `receive()` methods are employed by each adapter to interact with queues.

The `createQueue()`, `deleteQueue()` methods are used to manage queues.

## Commonality among adapters

The queue services supported by `Zend_Queue` do not all support the same functions. For example, `Zend_Queue_Adapter_Array`, `Zend_Queue_Adapter_Db`, support all functions, while `Zend_Queue_Adapter_Activemq` does not support queue listing, queue deletion, or counting of messages.

You can determine what functions are supported by using `Zend_Queue::isSupported()` or `Zend_Queue::getCapabilities()`.

- `createQueue()` - create a queue

- `deleteQueue()` - delete a queue

- `send()` - send a message

  `send()` is not available in all adapters; the `Zend_Queue_Adapter_Null` does not support `send()`.

- `receive()` - receive messages

  `receive()` is not available in all adapters; the `Zend_Queue_Adapter_Null` does not support `receive()`.

- `deleteMessage()` - delete a message

- `count()` - count the number of messages in a queue

- `isExists()` - checks the existence of a queue

`receive()` methods are employed by each adapter to interact with queues.

The `createQueue()` and `deleteQueue()` methods are used to manage queues.