Zend_Queue-Custom.xml 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 24249 -->
  4. <sect1 id="zend.queue.custom">
  5. <title>Zend_Queueのカスタマイズ</title>
  6. <sect2 id="zend.queue.custom.adapter">
  7. <title>独自のアダプタ作成</title>
  8. <para>
  9. <classname>Zend_Queue</classname>は、
  10. <classname>Zend_Queue_Adapter_AdapterAbstract</classname>を実装するどんなアダプタも扱います。
  11. 既存のアダプタ、
  12. または抽象クラス<classname>Zend_Queue_Adapter_AdapterAbstract</classname>のうちの1つを拡張することにより、
  13. 独自のアダプタを作成できます。
  14. このアダプタとして<classname>Zend_Queue_Adapter_Array</classname>を検討することが、
  15. 最も簡単に概念化できると提案します。
  16. </para>
  17. <programlisting language="php"><![CDATA[
  18. class Custom_DbForUpdate extends Zend_Queue_Adapter_Db
  19. {
  20. /**
  21. * @see tests/Zend/Queue/Custom/DbForUpdate.php のコード
  22. *
  23. * Custom_DbForUpdate はその行を見つけるために、SELECT ... FOR UPDATE を使います。
  24. * 既存のコードよりも求められる列をもたらす可能性がよりあります。
  25. *
  26. * しかしながら、データベース全てに SELECT ... FOR UPDATE フィーチャがあるとは限りません。
  27. *
  28. * 注意: これは後でZend_Queue_Adapter_Dbのオプションに変換されました。
  29. *
  30. * このコードは良い例をまだ提供します。
  31. */
  32. }
  33. $options = array(
  34. 'name' => 'queue1',
  35. 'driverOptions' => array(
  36. 'host' => '127.0.0.1',
  37. 'port' => '3306',
  38. 'username' => 'queue',
  39. 'password' => 'queue',
  40. 'dbname' => 'queue',
  41. 'type' => 'pdo_mysql'
  42. )
  43. );
  44. $adapter = new Custom_DbForUpdate($options);
  45. $queue = new Zend_Queue($adapter, $options);
  46. ]]></programlisting>
  47. <para>
  48. 同様に即座にアダプタを変えることもできます。
  49. </para>
  50. <programlisting language="php"><![CDATA[
  51. $adapter = new MyCustom_Adapter($options);
  52. $queue = new Zend_Queue($options);
  53. $queue->setAdapter($adapter);
  54. echo "Adapter: ", get_class($queue->getAdapter()), "\n";
  55. ]]></programlisting>
  56. <para>or</para>
  57. <programlisting language="php"><![CDATA[
  58. $options = array(
  59. 'name' => 'queue1',
  60. 'namespace' => 'Custom',
  61. 'driverOptions' => array(
  62. 'host' => '127.0.0.1',
  63. 'port' => '3306',
  64. 'username' => 'queue',
  65. 'password' => 'queue',
  66. 'dbname' => 'queue',
  67. 'type' => 'pdo_mysql'
  68. )
  69. );
  70. $queue = new Zend_Queue('DbForUpdate', $config); // Custom_DbForUpdate をロード
  71. ]]></programlisting>
  72. </sect2>
  73. <sect2 id="zend.queue.custom.message">
  74. <title>独自のメッセージクラスを作成</title>
  75. <para>
  76. <classname>Zend_Queue</classname>は、独自のメッセージクラスも扱います。
  77. 変数はアンダーラインで始めます。
  78. 例えば:
  79. </para>
  80. <programlisting language="php"><![CDATA[
  81. class Zend_Queue_Message
  82. {
  83. protected $_data = array();
  84. }
  85. ]]></programlisting>
  86. <para>
  87. 既存のメッセージクラスを拡張できます。
  88. <filename>tests/Zend/Queue/Custom/Message.php</filename>でコード例をご覧下さい。
  89. </para>
  90. </sect2>
  91. <sect2 id="zend.queue.custom-iterator">
  92. <title>独自のメッセージ・イテレータクラスを作成</title>
  93. <para>
  94. <classname>Zend_Queue</classname>は、独自のメッセージ・イテレータ・クラスも扱います。
  95. メッセージ・イテレータ・クラスは、
  96. <methodname>Zend_Queue_Adapter_Abstract::recieve()</methodname>からメッセージを返すために使われます。
  97. たとえメッセージが1つだけだとしても、
  98. <methodname>Zend_Queue_Abstract::receive()</methodname>は、
  99. <classname>Zend_Queue_Message_Iterator</classname>のようなコンテナ・クラスを常に返さなければなりません。
  100. </para>
  101. <para>
  102. <filename>tests/Zend/Queue/Custom/Messages.php</filename>でファイル名の例をご覧ください。
  103. </para>
  104. </sect2>
  105. <sect2 id="zend.queue.custom.queue">
  106. <title>独自の待ち行列クラスを作成</title>
  107. <para>
  108. <classname>Zend_Queue</classname>は上書きすることも簡単にできます。
  109. </para>
  110. <para>
  111. <filename>tests/Zend/Queue/Custom/Queue.php</filename>でファイル名の例をご覧ください。
  112. </para>
  113. </sect2>
  114. </sect1>