|
|
@@ -0,0 +1,133 @@
|
|
|
+<?xml version="1.0" encoding="UTF-8"?>
|
|
|
+<!-- Reviewed: no -->
|
|
|
+<!-- EN-Revision: 16700 -->
|
|
|
+<sect1 id="zend.queue.custom">
|
|
|
+ <title>Zend_Queueのカスタマイズ</title>
|
|
|
+
|
|
|
+ <sect2 id="zend.queue.custom.adapter">
|
|
|
+ <title>独自のアダプタ作成</title>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <classname>Zend_Queue</classname>は、
|
|
|
+ <classname>Zend_Queue_Adapter_AdapterAbstract</classname>を実装するどんなアダプタも扱います。
|
|
|
+ 既存のアダプタ、
|
|
|
+ または抽象クラス<classname>Zend_Queue_Adapter_AdapterAbstract</classname>のうちの1つを拡張することにより、
|
|
|
+ 独自のアダプタを作成できます。
|
|
|
+ このアダプタとして<classname>Zend_Queue_Adapter_Array</classname>を検討することが、
|
|
|
+ 最も簡単に概念化できると提案します。
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+class Custom_DbForUpdate extends Zend_Queue_Adapter_Db
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * @see tests/Zend/Queue/Custom/DbForUpdate.php のコード
|
|
|
+ *
|
|
|
+ * Custom_DbForUpdate はその行を見つけるために、SELECT ... FOR UPDATE を使います。
|
|
|
+ * 既存のコードよりも求められる列をもたらす可能性がよりあります。
|
|
|
+ *
|
|
|
+ * しかしながら、データベース全てに SELECT ... FOR UPDATE フィーチャがあるとは限りません。
|
|
|
+ *
|
|
|
+ * 注意: これは後でZend_Queue_Adapter_Dbのオプションに変換されました。
|
|
|
+ *
|
|
|
+ * このコードは良い例をまだ提供します。
|
|
|
+ */
|
|
|
+}
|
|
|
+
|
|
|
+$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 = Zend_Queue($adapter, $options);
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ 同様に即座にアダプタを変えることもできます。
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+$adapter = new MyCustom_Adapter($options);
|
|
|
+$queue = 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 = Zend_Queue('DbForUpdate', $config); // Custom_DbForUpdate をロード
|
|
|
+]]></programlisting>
|
|
|
+ </sect2>
|
|
|
+
|
|
|
+ <sect2 id="zend.queue.custom.message">
|
|
|
+ <title>独自のメッセージクラスを作成</title>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <classname>Zend_Queue</classname>は、独自のメッセージクラスも扱います。
|
|
|
+ 変数はアンダーラインで始めます。
|
|
|
+ 例えば:
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting language="php"><![CDATA[
|
|
|
+class Zend_Queue_Message
|
|
|
+{
|
|
|
+ protected $_data = array();
|
|
|
+}
|
|
|
+]]></programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ 既存のメッセージクラスを拡張できます。
|
|
|
+ <filename>tests/Zend/Queue/Custom/Message.php</filename>でコード例をご覧下さい。
|
|
|
+ </para>
|
|
|
+ </sect2>
|
|
|
+
|
|
|
+ <sect2 id="zend.queue.custom-iterator">
|
|
|
+ <title>独自のメッセージ・イテレータクラスを作成</title>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <classname>Zend_Queue</classname>は、独自のメッセージ・イテレータ・クラスも扱います。
|
|
|
+ メッセージ・イテレータ・クラスは、
|
|
|
+ <methodname>Zend_Queue_Adapter_Abstract::recieve()</methodname>からメッセージを返すために使われます。
|
|
|
+ たとえメッセージが1つだけだとしても、
|
|
|
+ <methodname>Zend_Queue_Abstract::receive()</methodname>は、
|
|
|
+ <classname>Zend_Queue_Message_Iterator</classname>のようなコンテナ・クラスを常に返さなければなりません。
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <filename>tests/Zend/Queue/Custom/Messages.php</filename>でファイル名の例をご覧ください。
|
|
|
+ </para>
|
|
|
+ </sect2>
|
|
|
+
|
|
|
+ <sect2 id="zend.queue.custom.queue">
|
|
|
+ <title>独自の待ち行列クラスを作成</title>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <classname>Zend_Queue</classname>は上書きすることも簡単にできます。
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ <filename>tests/Zend/Queue/Custom/Queue.php</filename>でファイル名の例をご覧ください。
|
|
|
+ </para>
|
|
|
+ </sect2>
|
|
|
+</sect1>
|