Zend_Queue-Custom.xml 4.4 KB

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