系统:Red Hat 4.4.7-17 内核:2.6.32-642.el6.x86_64
PHP版本:PHP-7.0.9
swoole版本:4.0.2及以上
Redis php扩展版本: 3.1.3
Redis版本: 3.0.0
Zookeeper php扩展版本:0.5.0
Zookeeper版本:3.4.10
一、用bt服务器来开始
检查php版本,在php环境中配置扩展 redis、swoole4X。
二、Zookeeper安装
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.6/apache-zookeeper-3.5.6.tar.gz
tar -zxvf apache-zookeeper-3.5.6.tar.gz
cd apache-zookeeper-3.5.6
cd zookeeper-client/zookeeper-client-c/
autoreconf -if
./configure
make&&make install
三、Zookeeper php扩展安装
到pecl.php.net查询 zookeeper扩展,选择了稳定正式版
wget http://pecl.php.net/get/zookeeper-0.6.4.tgz
taz -zxvf zookeeper-0.6.4.tgz
cd zookeeper-0.6.4
phpize
./configure --with-php-config=/www/server/php/71/bin/php-config
make&&make install
ls /www/server/php/71/lib/php/extensions/no-debug-non-zts-20160303/
opcache.a opcache.so redis.so swoole.so zookeeper.so
在bt面板修改php的配置增加
extension = zookeeper.so
重启PHP
php -m
检查有没有zookeeper组件、redis组件、swoole组件
四、尝试配置调用
1、安装composer的dubbo-php-client组件:配置阿里云的composer源
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
安装
composer require -vvv "quickj/dubbo-php-client:dev-master"
2、php安全函数禁用有时候会导致php composer异常。可以在bt的php设置中放开putenv(),pcntl_signal()两个
3、调用方法说明
https://packagist.org/packages/quickj/dubbo-php-client
五、尝试使用https://github.com/apache/dubbo-php-framework的项目
1、执行composer的安装
2、启动agent
检查启动文件以及对应的配置文件
cat agent/src/c/release/start_agent_server.sh
#!/bin/bash
log_dir="/www/wwwroot//dubbo-php-framework/agent/log/agent"
if [ ! -d $log_dir ]; then
mkdir -p $log_dir
fi
process=$(ps aux | grep -v "grep" | grep "release/agent_server" | wc -l)
if [ "$process" -ne "0" ]; then
ps aux |grep -v "grep" |grep "release/agent_server"|awk '{print $2}'|xargs kill -9
fi
cd /www/wwwroot/dubbo-php-framework/agent/src/c/release
cp agent agent_server
chmod u+x agent_server
cur_dir=$(pwd)
$cur_dir/agent_server 600 /www/wwwroot/dubbo-php-framework/config/global/conf/fsof.ini
关注log_dir的路径,启动失败成功一定要看log
关注最后一行,启动的配置文件位置(我修正过)。打开配置文件
修改对应的zk_url_list,既你的zookeepr的服务地址,还有zklog_path,日志路径。
;php path
3 php = '/usr/bin/php'
4
5 ;app's user
6 user = root
7
8 [fsof_setting]
9 ;machine enviroment:[dev|pre|gray|pro]
10 environment = dev
11
12 ;in p2p mode, provider not register to registry
13 p2p_mode = false
14
15 ;zookeeper log switch: 0.close; 1.error; 2.warn; 3.info; 4.debug
16 zklog_level = 0
17
18 ;zookeepr log path
19 zklog_path = '/tmp/zookeeper.log'
20
21 ;zookeeper url list
22 zk_url_list = http://192.168.1.33:2181
23
24 ;provider overload mode switch
25 overload_mode = true
26
27 ;if request wait more than waiting_time before processed, we will lost this quest, unit is micro-second
28 waiting_time = 2000
29
30 ;if overload_number requests trigger overload rule continuous, we will open loss reques t mode
31 overload_number = 5
32
33 ;how many quest is lost before lost mode is close
34 loss_number = 20
vi agent/src/c/common/fsof_global.h
修改
define ZOOKEEPER_HOST "192.168.1.33:2181"
define REDIS_UNIX_SOCK "/var/run/redis/redis.sock"
注意redis的sock文件位置,必须对,因为 domo的消费者是先从本地redis获取相关信息。
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef FSOF_GLOBAL_H
#define FSOF_GLOBAL_H
#define FSOF_ROOT_NAME "/dubbo"
#define PROVIDER_NAME "/providers"
#define PROVIDER_NODE_NAME "providers"
#define CONSUMER_NAME "/consumers"
#define ROUTERS_NAME "/routers"
#define CONFIGUREATORS_NAME "/configurators"
#define CONFIGUREATORS_NODE_NAME "configurators"
#define FSOF_REDIS_CONFIGURATOR_KEY_NAME "override"
#define ZOOKEEPER_HOST "192.168.1.33:2181"
#define DEFAULT_MAP_COUNT (10)
#define REDIS_UNIX_SOCK "/var/run/redis/redis.sock"
struct list {
char *value;
struct list *next;
};
#endif
保存后,尝试启动agent
cd /www/wwwroot/dubbo-php-framework/agent/src/c/
make
cd release
./start_agent_server.sh
如果成功,你可以从redis、日志看到你的相关dubbo提供的方法等信息。没有,认真检查以上几个步骤:redis、配置文件等,注意redis文件权限,在bt的redis配置文件中修改。默认是600,可以改为644之类?另外agent的REDIS_UNIX_SOCK这个参数,修改后make不一定生效--不知道为啥。也可以修改另外一个文件在agent/src/c/service/fsof_redis.c中,修改redis的链接方式,重新make。
3、
config/app/conf/dev/provider/demo-provider.deploy 修改为实际环境值
demo/demo-consumer/server/Consumer.php中修改Logger.php值
demo/demo-provider/server/DemoServiceImpl.php修改Logger.php值
以consumer.php为例:
<?php
$APP_SRC_PATH = __DIR__;
//echo $_SERVER['DOCUMENT_ROOT'];
require_once $_SERVER['DOCUMENT_ROOT'].'/vendor/autoload.php';
$fsofApiPath = dirname(dirname(dirname($APP_SRC_PATH))).DIRECTORY_SEPARATOR.'api'.DIRECTORY_SEPARATOR.'FSOFApi.php';
//echo $fsofApiPath;die;
require_once($fsofApiPath);
FSOFApi::configure('demo-consumer', $APP_SRC_PATH);
//use log4php\Logger;
require_once($_SERVER['DOCUMENT_ROOT'].'/vendor/apache/log4php/src/main/php/Logger.php');
Logger::configure(dirname(dirname(__FILE__)).'/config/log4php.xml');
date_default_timezone_set('PRC');
//php框架调用php提供的服务
$service = '你的服务';
//echo 3;
$proxy = FSOFApi::newProxy($service, 3);
//echo 4;
$ret = $proxy->invoke("你的方法","");
echo "ret:$ret".PHP_EOL;