1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.queue.custom">
<title>Anpassen von Zend_Queue</title>
<sect2 id="zend.queue.custom.adapter">
<title>Erstellung eigener Adapter</title>
<para>
<classname>Zend_Queue</classname> akzeptiert jeden Adapter der
<classname>Zend_Queue_Adapter_AdapterAbstract</classname> implementiert. Man kann
eigene Adapter erstellen indem einer der existierenden Adapter, oder die abstrakte
Klasse <classname>Zend_Queue_Adapter_AdapterAbstract</classname> erweitert wird.
Es wird empfohlen <classname>Zend_Queue_Adapter_Array</classname> anzuschauen da
dieser Adapter in seiner Konzeption der einfachste ist.
</para>
<programlisting language="php"><![CDATA[
class Custom_DbForUpdate extends Zend_Queue_Adapter_Db
{
/**
* @see Code in tests/Zend/Queue/Custom/DbForUpdate.php
*
* Custom_DbForUpdate verwendet SELECT ... FOR UPDATE um seine Zeilen zu
* finden. Das ist besser um die gewünschten Zeilen zu erstellen als der
* existierende Code.
*
* Trotzdem haben nicht alle Datenbanken SELECT ... FOR UPDATE als Feature.
*
* Notiz: Das wurde später konvertiert um eine Option für
* Zend_Queue_Adapter_Db zu sein.
*
* Dieser Code ist trotzdem ein gutes Beispiel.
*/
}
$options = array(
'name' => 'queue1',
'driverOptions' => array(
'host' => '127.0.0.1',
'port' => '3306',
'username' => 'queue',
'password' => 'queue',
'dbname' => 'queue',
'type' => 'pdo_mysql'
)
);
$adapter = new Custom_DbForUpdate($options);
$queue = new Zend_Queue($adapter, $options);
]]></programlisting>
<para>
Man kann den Adapter auch im Betrieb ändern.
</para>
<programlisting language="php"><![CDATA[
$adapter = new MyCustom_Adapter($options);
$queue = new Zend_Queue($options);
$queue->setAdapter($adapter);
echo "Adapter: ", get_class($queue->getAdapter()), "\n";
]]></programlisting>
<para>or</para>
<programlisting language="php"><![CDATA[
$options = array(
'name' => 'queue1',
'namespace' => 'Custom',
'driverOptions' => array(
'host' => '127.0.0.1',
'port' => '3306',
'username' => 'queue',
'password' => 'queue',
'dbname' => 'queue',
'type' => 'pdo_mysql'
)
);
$queue = new Zend_Queue('DbForUpdate', $config); // loads Custom_DbForUpdate
]]></programlisting>
</sect2>
<sect2 id="zend.queue.custom.message">
<title>Eine eigene Nachrichtenklasse erstellen</title>
<para>
<classname>Zend_Queue</classname> akzeptiert auch eigene Nachrichten Klassen. Unsere
Variablen beginnen mit einem Unterstrich. Zum Beispiel:
</para>
<programlisting language="php"><![CDATA[
class Zend_Queue_Message
{
protected $_data = array();
}
]]></programlisting>
<para>
Man kann die bestehende Nachrichten Klasse erweitern. Siehe den Beispielcode in
<filename>tests/Zend/Queue/Custom/Message.php</filename>.
</para>
</sect2>
<sect2 id="zend.queue.custom-iterator">
<title>Erstellen einer eigenen Nachrichten Iterator Klasse</title>
<para>
<classname>Zend_Queue</classname> akzeptiert auch eine eigene Nachrichten Iterator
Klasse. Diese Nachrichten Iterator Klasse wird verwendet um Nachrichten von
<methodname>Zend_Queue_Adapter_Abstract::recieve()</methodname> zurckzugeben.
<methodname>Zend_Queue_Abstract::receive()</methodname> sollte immer eine Controller
Klasse zurückgeben so wie <classname>Zend_Queue_Message_Iterator</classname> selbst
wenn nur eine Nachricht vorhanden ist.
</para>
<para>
Siehe den Beispiel Dateinamen in
<filename>tests/Zend/Queue/Custom/Messages.php</filename>.
</para>
</sect2>
<sect2 id="zend.queue.custom.queue">
<title>Erstellen einer eigenen Queue Klasse</title>
<para>
<classname>Zend_Queue</classname> kann auch sehr einfach überladen werden.
</para>
<para>
Siehe den Beispiel Dateinamen in
<filename>tests/Zend/Queue/Custom/Queue.php</filename>.
</para>
</sect2>
</sect1>
|