<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 16949 -->
<!-- Reviewed: no -->
<sect1 id="zend.queue.framework">
    <title>Framework</title>

    <para>
        <classname>Zend_Queue</classname> ist ein Proxy der die Details des Queue Services
        versteckt. Die Queue Services werden durch
        <classname>Zend_Queue_Adapter_&lt;service&gt;</classname> repräsentiert. Zum Beispiel ist
        <classname>Zend_Queue_Adapter_Db</classname> eine Queue die Datenbanktabellen verwendet
        um Nachrichten zu speichern und zu empfangen.
    </para>

    <para>
        Anbei ist ein Beispiel für die Verwendung von Datenbanktabellen für ein Queueing System:
    </para>

    <programlisting language="php"><![CDATA[
$options = array(
    'name'          => 'queue1',
    'driverOptions' => array(
        'host'      => '127.0.0.1',
        'port'      => '3306',
        'username'  => 'queue',
        'password'  => 'queue',
        'dbname'    => 'queue',
        'type'      => 'pdo_mysql'
    )
);

// Erstellt eine Datenbank Queue.
// Zend_Queue fügt vorne Zend_Queue_Adapter_ an 'Db' für den Klassennamen an.
$queue = Zend_Queue('Db', $options);
]]></programlisting>

    <para>
        Der Constructor von <classname>Zend_Queue</classname> erstellt eine
        <classname>Zend_Queue_Adapter_Db</classname> und initialisiert den Adapter mit den
        Konfigurationseinstellungen.
    </para>

    <para>
        Die akzeptierten Konfigurationseinstellungen für jeden Adapter sind in den
        <ulink url="zend.queue.adapters">Adapter Notizen</ulink> beschrieben.
    </para>

    <para>
        <classname>Zend_Queue</classname> gibt Nachrichten zurück indem es die
        <classname>Zend_Queue_Message_Iterator</classname> Klasse verwendet, welche eine
        Implementation vom <acronym>SPL</acronym> <classname>Iterator</classname> und von
        <classname>Countable</classname> ist.
        <classname>Zend_Queue_Message_Iterator</classname> enthält ein Array von
        <classname>Zend_Queue_Message</classname> Objekten.
    </para>

    <programlisting language="php"><![CDATA[
$messages = $queue->receive(5);
foreach ($messages as $i => $message) {
    echo "$i) Nachricht => ", $message->body, "\n";
}
]]></programlisting>

    <para>
        Alle Exceptions die geworfen werden sind von der Klasse
        <classname>Zend_Queue_Exception</classname>.
    </para>

    <sect2 id="zend.queue.framework.basics">
        <title>Einführung</title>

        <para>
            <classname>Zend_Queue</classname> ist eine Proxy Klasse die einen Adapter
            repräsentiert.
        </para>

        <para>
            Die Methoden <methodname>send()</methodname>, <methodname>count($queue)</methodname>,
            und <methodname>receive()</methodname> werden von jedem Adapter verwendet um mit den
            Queues zu interagieren.
        </para>

        <para>
            Die Methoden <methodname>createQueue()</methodname>,
            <methodname>deleteQueue()</methodname> werden verwendet um Queues zu managen.
        </para>
    </sect2>

    <sect2 id="zend.queue.framework.support">
        <title>Gemeinsamkeiten für alle Adapter</title>

        <para>
            Die Queue Services die von <classname>Zend_Queue</classname> unterstützt werden
            unterstützen nicht alle die gleichen Funktionalitäten. Zum Beispiel unterstützen
            <classname>Zend_Queue_Adapter_Array</classname> und
            <classname>Zend_Queue_Adapter_Db</classname> alle Funktionen, wärend
            <classname>Zend_Queue_Adapter_Activemq</classname> das Auflisten und Löschen von Queues
            der das Zählen von Nachrichten nicht unterstützt.
        </para>

        <para>
            Man kann erkennen welche Funktionen unterstützt werden indem
            <methodname>Zend_Queue::isSupported()</methodname> oder
            <methodname>Zend_Queue::getCapabilities()</methodname> verwendet wird.
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis><methodname>create()</methodname></emphasis> - Erstellt eine Queue
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><methodname>delete()</methodname></emphasis> - Löscht eine Queue
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><methodname>send()</methodname></emphasis> - Sendet eine Nachricht
                </para>

                <para>
                    <methodname>send()</methodname> ist nicht in allen Adaptern vorhanden;
                    <classname>Zend_Queue_Adapter_Null</classname> unterstützt
                    <methodname>send()</methodname> nicht.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><methodname>receive()</methodname></emphasis> - Empfängt eine
                    Nachricht
                </para>

                <para>
                    <methodname>receive()</methodname> ist nicht in allen Adaptern vorhanden;
                    <classname>Zend_Queue_Adapter_Null</classname> unterstützt
                    <methodname>receive()</methodname> nicht.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><methodname>deleteMessage()</methodname></emphasis> - Löscht eine
                    Nachricht
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><methodname>count()</methodname></emphasis> - Zählt die Anzahl an
                    Nachrichten in einer Queue
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis><methodname>isExists()</methodname></emphasis> - Prüft auf die
                    Existenz einer Queue
                </para>
            </listitem>
        </itemizedlist>

        <para>
            <methodname>receive()</methodname> Methoden werden von jedem Adapter zur Verfügung
            gestellt um mit Queues zu interagieren.
        </para>

        <para>
            Die Methoden <methodname>createQueue()</methodname> und
            <methodname>deleteQueue()</methodname> werden verwendet um Queues zu managen.
        </para>
    </sect2>
</sect1>
