PHPメッセージングサービスの紹介

PHPで利用できる基本的なメッセージングサービスの複雑さについて詳しく学んでください。

  1. セマフォ
  2. ギアマン
  3. QUERCUS経由のJMSとPHP
  4. PHPMQ-> MANTARAY経由のPHPを使用したJMS


1.セマフォ


セマフォは、実際にはセマフォ、共有メモリ、プロセス間メッセージング(IPC)を含む3つの拡張機能で構成されるPHPモジュールです。 このモジュールはSystem V IPC関数ファミリーのシェルを提供します--enable-sysvsem使用するには、デフォルトで有効になっていないため有効にする必要があります。そのため、 --enable-sysvsemオプションを使用してSystem V PHPセマフォのサポートを有効にします。 System V共有メモリサポートを有効にするには、 --enable-sysvshmを使用してPHPをコンパイルし--enable-sysvshm 。 System Vメッセージのサポートを有効にするには、--enable --enable-sysvmsgを使用してPHPをコンパイルし--enable-sysvmsg

*注:セマフォは、Windowsプラットフォームでは使用できません。

プロセス間通信モジュール(IPC)を使用するために、以下にリストされている一連の関数があります。


2.ギアマン


Gearmanは、複数のプロセスで動作するように設計されたアプリケーションフレームワークであり、プログラムがタスクを並行して実行し、言語間で関数を呼び出すことができます。 Gearmanは、高可用性Webサイトからデータベース複製イベントの送信まで、さまざまなアプリケーションで使用でき、ジョブサーバーとクライアント/ワーカーAPIの2つの主要コンポーネントで構成されています。 クライアントおよびワーカーAPIはさまざまな言語で使用できますが、ジョブサーバーはCライブラリまたはPerlライブラリとしてのみ使用できます。 この事実により、主に他のライブラリへの依存関係が未解決であるため、Windowsでサーバーを実行することが難しくなります。

Gearmanアプリケーションプラットフォームは、次の2つの方法でインストールできます。
  1. Net_Gearmanという純粋なPHPラッパーを使用し、 pear install Net_Gearmanを使用します。
  2. 専用のPHP拡張。 [ ] 。 この拡張機能は、Gearmanクライアントおよびワーカーを作成するためのOOPインターフェイスを提供します。


3. Quercusを介したPHPを使用したJMS


おそらくご存知のように、 JMSの機能のほとんどはメッセンジャーサービス用であり、Javaの世界では非常に適していますが、PHPには適していません。 これらの関数をPHPで使用するには、さまざまなテクノロジー(この場合はQuercus)を使用してJavaを実装する必要があります。

Java Message Service(JMS)は、Java Enterprise Edition(Java EE)ベースのアプリケーションコンポーネントがメッセージを作成、送信、受信、および読み取りできるようにするメッセージング標準です。 データ交換は、非同期(JMSプロバイダーがメッセージを到着時にクライアントに配信できます。クライアントはメッセージを受信するためにメッセージを要求する必要はありません)または信頼性(JMS APIはメッセージがすぐに1回だけ配信されることを保証できます)メッセージをスキップしたり、重複したメッセージを受信したりできるアプリケーションで利用できます)。

Quercusは、Java Caucho TechnologyによるPHP 5の100%実装であり、オープンソースGPLでリリースされています。 Quercusには、PDF、PDO、MySQL、JSONなどの多くのPHPモジュールと拡張機能が付属しており、JavaサービスとPHPスクリプトを緊密に統合しているため、JMSでPHPを使用すると非常に便利です。 Quercusは、Javaメッセージングサービスを使用した便利なメッセージングインターフェイスも提供するため、このセクションで後述するように、Resin JMS実装またはJMSを実装する他のメッセージングサービスを使用してメッセージを送受信できます。 Quercusをインストールして使用するには、2つのオプションがあります。

Resin Webサーバー

Quercusは、 Resin Application Serverの一部です Resinに組み込まれているため、追加のインストールは必要ありません。 ResinをWindowsにインストールするには、 www.caucho.com/resin-3.1/doc/resin-web-server.xtp#GettingStartedの手順に従ってください 。 Resinのインストールを確認するには、ブラウザでlocalhost :8080に移動します。

QuercusでJMSを使用するには、PHPとJAVA用にJMSを構成します。これには、 ConnectionFactoryQueueをインストールする必要があります。どちらもWEB-INFディレクトリのresin-web.xmlファイルにあります。
非表示のテキスト

resin-web.xml
 <web-app xmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> <!-- - JMS MemoryQueue --> <resin:MemoryQueue> <Named>Queue</Named> </resin:MemoryQueue> <resin:JmsConnectionFactory/> <!-- - MyListener receives messages from the queue and stores them in - the MessageStore --> <ejb-message-bean class="example.MyListener"> <destination>#{Queue}</destination> </ejb-message-bean> </web-app> 


Quercusインターフェースプログラミングモデルは、 java_bean()呼び出しを使用するキューアクセスインターフェースを想定しています。これは、resin-web.xmlファイルで名前付きオブジェクト(この場合はキューを検索します。 Queueがjava.util.concurrent.BlockingQueueインターフェースを実装しているため、PHPスクリプトにはoffer()を使用してデータをすぐにキューに送信し、 poll()を使用してデータを受信する機能があります。

 <?php if (array_key_exists("message", $_POST)) { $queue = java_bean("Queue"); if (! $queue) { echo "Unable to get message queue!\n"; } else { if ($queue->offer($_POST["message"]) == TRUE) { echo "Successfully sent message '" . $_POST["message"] . "'"; } else { echo "Unable to send message '" . $_POST["message"] . "'"; } } } ?> 


スクリプトはPOST変数「メッセージ」をチェックし、設定されている場合、この変数の値をJMSキューに送信します。 メッセージ駆動型エンティティ(MDB)は、これらのメッセージを受信して​​書き込みます。 レコードはサーブレットによって表示されます。

NetBeans IDEおよびGlassFish

Quercusを使用する2番目の方法は、NetBeans IDEとGlassFishをサーバーとして使用することです。 NetBeansでQuercusを使用するには、次の手順を実行する必要があります。
  1. Quercus-4.0.39.war(http://quercus.caucho.com/)を解凍し、WEB-INF / libディレクトリのJARファイルをGLASSFISH_HOME / domains / domain / libにコピーします。
    非表示のテキスト
  2. NetBeans IDEを使用して新しいWebアプリケーションプロジェクト「PHPexample」を作成し、サーバーとしてGlassFishを選択します。
    非表示のテキスト
    非表示のテキスト
    非表示のテキスト
    [完了]をクリックすると、次の構造のフォルダーが作成されます。
    非表示のテキスト

  3. WEB-INFディレクトリで、 web.xmlファイルを作成します (以前に作成されていない場合):File> New> Empty。 次のテキストを貼り付けて保存します。
    web.xml
    web.xml
     <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <description>Caucho Technology's PHP Implementation, Running on GlassFish Java EE 5</description> <servlet> <servlet-name>Quercus Servlet</servlet-name> <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Quercus Servlet</servlet-name> <url-pattern>\*.php</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.php</welcome-file> </welcome-file-list> </web-app> 

    そこで、PHPからサーブレットを宣言しました。
  4. メインプロジェクトPHPexampleで、コンテキストを使用してindex.phpというPHPファイルを作成します。
    index.php
    index.php
     <?php echo " !"; phpinfo(); ?> 

    このページは、ブラウザおよびいくつかのPHP設定オプションでHello World!を印刷します。 作成されたプロジェクトのディレクトリ構造は次のとおりです。
    非表示のテキスト

    「index.jsp」はJSPでの作業を開始するためのテンプレートファイルにすぎず、タスクとは関係がないことに注意してください。
  5. localhost :8080 / PHPexample / index.php /のGlassFishでPHPアプリケーションを実行すると、以下の出力が得られます。
    非表示のテキスト

    QuercusがサーバーとしてNetBeans IDEおよびGlassFishで実行されることを確認したら、JMSのすべての機能とQuercusに付属する他のすべての拡張機能を使用してみることができます。


4. PHPMQを介したPHPを使用したJMS


PHPMQは、PHP向けのオープンソースのピアツーピアメッセージングツールキットであり、PHP開発者は、配信や継続的なメッセージングを確保しながら、キューやトピックでメッセージを送受信するなどのJMS操作を実行できます。 これにより、いわゆるバックオフィスのデータにアクセスできるPHP開発者に新しい可能性が開かれます。これは、通常、アプリケーションサーバーと古いメッセージングソリューションでのみ利用できます。

PHPMQ( )マンタレイ( は、Java(JMS)、C ++、および.NETアプリケーションのメッセージングの問題を解決するための分散型のピアツーピアのサーバーレスシステムであり、JBoss、WebLogic、およびWebSphereと統合します。 保証された配信、セキュリティ、およびトランザクションを提供し、TCP、SSL、およびHTTPプロトコルをサポートします。

PHPMQのインストール:
→MantaRayメッセージングバスをダウンロードしてインストールする
→MantaRayを構成してRMI APIを有効にし、RMIレジストリを作成します(MantaRayプロジェクトのRMI APIドキュメントを参照)
→スタンドアロンアプリケーションとしてMantarayを起動
→php.iniでPHP-Java拡張機能を有効にする-関連情報はwww.php.net/manual/en/ref.java.phpで入手できます
→phpmq.jar(zipアーカイブにある)とmanta.jar(MantaRay.zipにある)をphp.iniの「java.class.path」プロパティに追加する
→サンプルを実行します(テーマの場合はchat.php、キューの場合はqueue_receiver.php、queue_sender.php)

PHPMQメッセージングAPIには次の機能が含まれます。


翻訳者から

翻訳の開始後、素材がHabrのレベルに達していないことが判明しました。 これが、だれもこの資料の恩恵を受けることを妨げないことを願っています。
いつものように、不正確な点はすべてHabr-mailに報告してください。

Source: https://habr.com/ru/post/J228629/


All Articles