gearman服務串連php java

來源:互聯網
上載者:User

標籤:

在實際工作中,會碰到兩個問題

(1)現有系統想整合一個開發組件,而該組件的SDK卻沒有現有語言版本。

(2)系統中的一項功能非常耗費資源,最好能利用其它機器來處理。

本文介紹gearman的使用,實現PHP調用JAVA。gearman是支援網路方式調用,因此也可以用來實現任務分發。

gearman的官方網站為

http://gearman.org/

 

,gearman系統主要分為3個部分,server、client、worker。

一、server安裝

下載 server,官方網站上提供了三個語言版本的server。http://gearman.org/download/

我們選擇C語言版本,為,https://launchpad.net/gearmand

目前提供下載的是gearmand-1.1.12.tar.gz。

在編譯之前,需要先安裝用到的庫問題,

(1)yum install boost-devel -y

(2)yum install gprep -y

(3)yum install libevent-devel -y

(4)yum install libuuid-devel -y

解壓gearmand-1.1.12,執行

 

./configuremakemake install

安裝完成後,在命令列運行,就可以在本地就啟動一個Job server ,等待client 和worker 串連。

 

gearmand -d

 二、安裝PHP擴充

利用pecl安裝gearman php擴充。建議在安裝gearman server的時候採用預設安裝,這樣在安裝php 擴充的時候就比較容易找到需要的標頭檔、連結檔案。

pecl install gearman

編輯php.ini,添加

extension="gearman.so"

命令列測試 php -m |grep gearman

PHP 測試代碼

worker.php

<?php$worker= new GearmanWorker();$worker->addServer(‘127.0.0.1‘, 4730);$worker->addFunction(‘reverse‘, ‘my_reverse_function‘);while ($worker->work());function my_reverse_function($job){    return strrev($job->workload());}?>

client.php

<?php$client= new GearmanClient();$client->addServer(‘127.0.0.1‘, 4730);echo $client->do(‘reverse‘, ‘Hello World!‘), "\n";?>

首先運行worker.php,程式不會結束,會一直運行。

運行client,返回啟動並執行結果。

gearman提供了一個命令列偵查工具(要安裝nc)。

watch -n 1 "(echo status; sleep 0.1) | nc 127.0.0.1 4730"

,在gearman上註冊了reverse函數,worker數量為1(第3列),client 0(第1列),等待處理的請求也為0(第2列)。

三、安裝JAVA擴充

官方網站提供了兩個java擴充,java gearman server 、gearman java。筆者在用gearman java的時候,傳遞參數覺得不方便,就改用gearman server了。

下載gearman server,地址

https://github.com/gearman/java-service

maven編譯。注,筆者也沒有過maven,下面是我的操作過程

(a)下載maven ,解壓

https://maven.apache.org/download.cgi

(b)修改/etc/profile檔案,將maven/bin目錄添加到path路徑上。source /etc/profile。

mvn --vesion

 進入java service 目錄執行下面的命令

mvn package

編譯的時間比較長,編譯成功後,會在源碼目錄下產生一個target目錄。注,在編譯過程中會下載很多模組,如果編譯失敗可以多試幾次。

其中 java-gearman-service-0.7.0-snapshot.jar就是需要檔案。

 建立/root/workspace/gearman工程目錄,建立檔案夾 com/jfjb/gearman。建立EchoWorker.java檔案,

package com.jfjb.gearman;import org.gearman.Gearman;import org.gearman.GearmanFunction;import org.gearman.GearmanFunctionCallback;import org.gearman.GearmanServer;import org.gearman.GearmanWorker;/** * The echo worker polls jobs from a job server and execute the echo function. *  * The echo worker illustrates how to setup a basic worker */public class EchoWorker implements GearmanFunction {        /** The echo function name */        public static final String ECHO_FUNCTION_NAME = "echo";        /** The host address of the job server */        public static final String ECHO_HOST = "localhost";        /** The port number the job server is listening on */        public static final int ECHO_PORT = 4730;        public static void main(String... args) {                /*                 * Create a Gearman instance                 */                Gearman gearman = Gearman.createGearman();                /*                 * Create the job server object. This call creates an object represents                 * a remote job server.                 *                  * Parameter 1: the host address of the job server.                 * Parameter 2: the port number the job server is listening on.                 *                  * A job server receives jobs from clients and distributes them to                 * registered workers.                 */                GearmanServer server = gearman.createGearmanServer(                                EchoWorker.ECHO_HOST, EchoWorker.ECHO_PORT);                /*                 * Create a gearman worker. The worker poll jobs from the server and                 * executes the corresponding GearmanFunction                 */                GearmanWorker worker = gearman.createGearmanWorker();                /*                 *  Tell the worker how to perform the echo function                 */                worker.addFunction(EchoWorker.ECHO_FUNCTION_NAME, new EchoWorker());                /*                 *  Tell the worker that it may communicate with the this job server                 */                worker.addServer(server);        }        @Override        public byte[] work(String function, byte[] data,                        GearmanFunctionCallback callback) throws Exception {                /*                 * The work method performs the gearman function. In this case, the echo                 * function simply returns the data it received                 */                return data;        }}

 在/root/workspace/gearman中添加需要的jar, java-gearman-service-0.7.0-snapshot.jar,slf4j-api-1.6.4.jar,slf4j-simple-1.6.4.jar。

javac -cp java-gearman-service-0.7.0-SNAPSHOT.jar com/jfjb/gearman/EchoWorker.java

運行

java -cp java-gearman-service-0.7.0-SNAPSHOT.jar:slf4j-api-1.6.4.jar:slf4j-simple-1.6.4.jar:/root/workspace/gearman3 com/jfjb/gearman/EchoWorker

此時,利用命令列查看gearman註冊的work,echo函數就是EchoWorker註冊到server上的函數。

建立一個PHP檔案clientjava.php,用來調用“echo”

<?php$client= new GearmanClient();$client->addServer(‘127.0.0.1‘, 4730);echo $client->do(‘echo‘, ‘Hello World!‘), "\n";?>

 

 測試過程完畢。

附錄,由於作者是在一台全新系統上安裝全部軟體的。將一些設定記錄下。

一、php安裝

yum install -y php

yum install -y php-devel

二、pecl安裝

wget http://pear.php.net/go-pear.phar

php go-pear.phar 

三、php後台運行

setsid php worker.php

四、jdk 安裝

rpm -ivh  jdk-7u2-linux-i586.rpm 

查看命令

java -version

javac -version

修改 /etc/profile 

export JAVA_HOME=/usr/java/jdk1.7.0_21 

export PATH=$JAVA_HOME/bin:$PATH 

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar

五、eclipse安裝

下載eclipse jar檔案。

我下載的eclipse版本為eclipse-jee-luna-SR2-linux-gtk.tar.gz。

http://mirrors.opencas.cn/eclipse//technology/epp/downloads/release/luna/SR2/eclipse-jee-luna-SR2-linux-gtk.tar.gz

解壓後,控制台進入eclipse檔案夾,命令 ./eclipse啟動eclipse

gearman服務串連php java

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.