{"id":969,"date":"2020-02-14T14:58:57","date_gmt":"2020-02-14T06:58:57","guid":{"rendered":"http:\/\/www.shuran.cn\/?p=969"},"modified":"2020-02-19T10:34:15","modified_gmt":"2020-02-19T02:34:15","slug":"php%e4%b8%8edubbo","status":"publish","type":"post","link":"https:\/\/www.shuran.cn\/?p=969","title":{"rendered":"php\u4e0edubbo"},"content":{"rendered":"\n<p>\u7cfb\u7edf\uff1aRed Hat 4.4.7-17 \u5185\u6838\uff1a2.6.32-642.el6.x86_64<br>PHP\u7248\u672c\uff1aPHP-7.0.9<br>swoole\u7248\u672c\uff1a4.0.2\u53ca\u4ee5\u4e0a<br>Redis php\u6269\u5c55\u7248\u672c: 3.1.3<br>Redis\u7248\u672c\uff1a 3.0.0<br>Zookeeper php\u6269\u5c55\u7248\u672c\uff1a0.5.0<br>Zookeeper\u7248\u672c\uff1a3.4.10<\/p>\n\n\n\n<p>\u4e00\u3001\u7528bt\u670d\u52a1\u5668\u6765\u5f00\u59cb<br>\u68c0\u67e5php\u7248\u672c\uff0c\u5728php\u73af\u5883\u4e2d\u914d\u7f6e\u6269\u5c55 redis\u3001swoole4X\u3002<\/p>\n\n\n\n<p>\u4e8c\u3001Zookeeper\u5b89\u88c5<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wget https:\/\/mirrors.tuna.tsinghua.edu.cn\/apache\/zookeeper\/zookeeper-3.5.6\/apache-zookeeper-3.5.6.tar.gz\ntar -zxvf apache-zookeeper-3.5.6.tar.gz \ncd apache-zookeeper-3.5.6\ncd zookeeper-client\/zookeeper-client-c\/\nautoreconf -if\n.\/configure\nmake&amp;&amp;make install<\/code><\/pre>\n\n\n\n<p>\u4e09\u3001Zookeeper php\u6269\u5c55\u5b89\u88c5<br>\u5230pecl.php.net\u67e5\u8be2 zookeeper\u6269\u5c55\uff0c\u9009\u62e9\u4e86\u7a33\u5b9a\u6b63\u5f0f\u7248<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wget http:\/\/pecl.php.net\/get\/zookeeper-0.6.4.tgz\ntaz -zxvf zookeeper-0.6.4.tgz \ncd zookeeper-0.6.4\nphpize\n.\/configure --with-php-config=\/www\/server\/php\/71\/bin\/php-config\nmake&amp;&amp;make install\nls \/www\/server\/php\/71\/lib\/php\/extensions\/no-debug-non-zts-20160303\/\nopcache.a  opcache.so  redis.so  swoole.so  zookeeper.so<\/code><\/pre>\n\n\n\n<p>\u5728bt\u9762\u677f\u4fee\u6539php\u7684\u914d\u7f6e\u589e\u52a0<br>extension = zookeeper.so<br>\u91cd\u542fPHP<br>php -m<br>\u68c0\u67e5\u6709\u6ca1\u6709zookeeper\u7ec4\u4ef6\u3001redis\u7ec4\u4ef6\u3001swoole\u7ec4\u4ef6<\/p>\n\n\n\n<p>\u56db\u3001\u5c1d\u8bd5\u914d\u7f6e\u8c03\u7528<br>1\u3001\u5b89\u88c5composer\u7684dubbo-php-client\u7ec4\u4ef6\uff1a\u914d\u7f6e\u963f\u91cc\u4e91\u7684composer\u6e90<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>composer config -g repo.packagist composer https:\/\/mirrors.aliyun.com\/composer\/\n\u5b89\u88c5\ncomposer require -vvv \"quickj\/dubbo-php-client:dev-master\"<\/code><\/pre>\n\n\n\n<p>2\u3001php\u5b89\u5168\u51fd\u6570\u7981\u7528\u6709\u65f6\u5019\u4f1a\u5bfc\u81f4php composer\u5f02\u5e38\u3002\u53ef\u4ee5\u5728bt\u7684php\u8bbe\u7f6e\u4e2d\u653e\u5f00putenv()\uff0cpcntl_signal()\u4e24\u4e2a<\/p>\n\n\n\n<p>3\u3001\u8c03\u7528\u65b9\u6cd5\u8bf4\u660e<br><a href=\"https:\/\/packagist.org\/packages\/quickj\/dubbo-php-client\">https:\/\/packagist.org\/packages\/quickj\/dubbo-php-client<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>\u4e94\u3001\u5c1d\u8bd5\u4f7f\u7528<a href=\"https:\/\/github.com\/apache\/dubbo-php-framework\">https:\/\/github.com\/apache\/dubbo-php-framework<\/a>\u7684\u9879\u76ee<br>1\u3001\u6267\u884ccomposer\u7684\u5b89\u88c5<br>2\u3001\u542f\u52a8agent<br>\u68c0\u67e5\u542f\u52a8\u6587\u4ef6\u4ee5\u53ca\u5bf9\u5e94\u7684\u914d\u7f6e\u6587\u4ef6<br>cat  agent\/src\/c\/release\/start_agent_server.sh<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n\nlog_dir=\"\/www\/wwwroot\/\/dubbo-php-framework\/agent\/log\/agent\"\n\nif &#91; ! -d $log_dir ]; then\n    mkdir -p $log_dir\nfi\n\nprocess=$(ps aux  | grep -v \"grep\" | grep \"release\/agent_server\" | wc -l) \nif &#91; \"$process\" -ne \"0\" ]; then\n       ps aux |grep -v \"grep\" |grep \"release\/agent_server\"|awk '{print $2}'|xargs kill -9\nfi\n\ncd \/www\/wwwroot\/dubbo-php-framework\/agent\/src\/c\/release\ncp agent agent_server\nchmod  u+x agent_server\ncur_dir=$(pwd)\n$cur_dir\/agent_server 600 \/www\/wwwroot\/dubbo-php-framework\/config\/global\/conf\/fsof.ini<\/code><\/pre>\n\n\n\n<p>\u5173\u6ce8log_dir\u7684\u8def\u5f84\uff0c\u542f\u52a8\u5931\u8d25\u6210\u529f\u4e00\u5b9a\u8981\u770blog<br>\u5173\u6ce8\u6700\u540e\u4e00\u884c\uff0c\u542f\u52a8\u7684\u914d\u7f6e\u6587\u4ef6\u4f4d\u7f6e\uff08\u6211\u4fee\u6b63\u8fc7\uff09\u3002\u6253\u5f00\u914d\u7f6e\u6587\u4ef6<br>\u4fee\u6539\u5bf9\u5e94\u7684zk_url_list\uff0c\u65e2\u4f60\u7684zookeepr\u7684\u670d\u52a1\u5730\u5740\uff0c\u8fd8\u6709zklog_path\uff0c\u65e5\u5fd7\u8def\u5f84\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>;php path                                                                              \n      3 php = '\/usr\/bin\/php'                                                                   \n      4                                                                                        \n      5 ;app's user                                                                            \n      6 user = root                                                                            \n      7                                                                                        \n      8 &#91;fsof_setting]                                                                         \n      9 ;machine enviroment:&#91;dev|pre|gray|pro]                                                 \n     10 environment = dev                                                                      \n     11                                                                                        \n     12 ;in p2p mode, provider not register to registry                                        \n     13 p2p_mode = false                                                                       \n     14                                                                                        \n     15 ;zookeeper log switch: 0.close; 1.error; 2.warn; 3.info; 4.debug                       \n     16 zklog_level = 0                                                                        \n     17                                                                                        \n     18 ;zookeepr log path                                                                     \n     19 zklog_path = '\/tmp\/zookeeper.log'                                                      \n     20                                                                                        \n     21 ;zookeeper url list                                                                    \n     22 zk_url_list = http:\/\/192.168.1.33:2181                                                 \n     23                                                                                        \n     24 ;provider overload mode switch                                                         \n     25 overload_mode = true                                                                   \n     26                                                                                        \n     27 ;if request wait more than waiting_time before processed, we will lost this quest, unit         is micro-second                                                                       \n     28 waiting_time = 2000                                                                    \n     29                                                                                        \n     30 ;if overload_number requests trigger overload rule continuous, we will open loss reques        t mode                                                                                 \n     31 overload_number = 5                                                                    \n     32                                                                                        \n     33 ;how many quest is lost before lost mode is close                                      \n     34 loss_number = 20\n<\/code><\/pre>\n\n\n\n<p>vi  agent\/src\/c\/common\/fsof_global.h\u00a0<br>\u4fee\u6539<br>define ZOOKEEPER_HOST \"192.168.1.33:2181\"<br><strong>define REDIS_UNIX_SOCK  \"\/var\/run\/redis\/redis.sock\"  <\/strong><br>\u6ce8\u610fredis\u7684sock\u6587\u4ef6\u4f4d\u7f6e\uff0c\u5fc5\u987b\u5bf9\uff0c\u56e0\u4e3a domo\u7684\u6d88\u8d39\u8005\u662f\u5148\u4ece\u672c\u5730redis\u83b7\u53d6\u76f8\u5173\u4fe1\u606f\u3002<strong><br><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *     http:\/\/www.apache.org\/licenses\/LICENSE-2.0\n *\n *  Unless required by applicable law or agreed to in writing, software\n *  distributed under the License is distributed on an \"AS IS\" BASIS,\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *  See the License for the specific language governing permissions and\n *  limitations under the License.\n *\/\n#ifndef FSOF_GLOBAL_H\n#define FSOF_GLOBAL_H\n\n#define FSOF_ROOT_NAME \"\/dubbo\"\n#define PROVIDER_NAME \"\/providers\"\n#define PROVIDER_NODE_NAME \"providers\"\n#define CONSUMER_NAME \"\/consumers\"\n#define ROUTERS_NAME  \"\/routers\"\n#define CONFIGUREATORS_NAME \"\/configurators\"\n#define CONFIGUREATORS_NODE_NAME \"configurators\"\n#define FSOF_REDIS_CONFIGURATOR_KEY_NAME \"override\"\n\n#define ZOOKEEPER_HOST \"192.168.1.33:2181\"\n#define DEFAULT_MAP_COUNT (10)\n#define REDIS_UNIX_SOCK  \"\/var\/run\/redis\/redis.sock\"\n\n\n\nstruct list {\n    char *value;\n    struct list *next;\n};\n\n#endif<\/code><\/pre>\n\n\n\n<p>\u4fdd\u5b58\u540e\uff0c\u5c1d\u8bd5\u542f\u52a8agent<br>cd \/www\/wwwroot\/dubbo-php-framework\/agent\/src\/c\/<br>make<br>cd release<br>.\/start_agent_server.sh<br><br>\u5982\u679c\u6210\u529f\uff0c\u4f60\u53ef\u4ee5\u4eceredis\u3001\u65e5\u5fd7\u770b\u5230\u4f60\u7684\u76f8\u5173dubbo\u63d0\u4f9b\u7684\u65b9\u6cd5\u7b49\u4fe1\u606f\u3002\u6ca1\u6709\uff0c\u8ba4\u771f\u68c0\u67e5\u4ee5\u4e0a\u51e0\u4e2a\u6b65\u9aa4\uff1aredis\u3001\u914d\u7f6e\u6587\u4ef6\u7b49\uff0c\u6ce8\u610fredis\u6587\u4ef6\u6743\u9650\uff0c\u5728bt\u7684redis\u914d\u7f6e\u6587\u4ef6\u4e2d\u4fee\u6539\u3002\u9ed8\u8ba4\u662f600\uff0c\u53ef\u4ee5\u6539\u4e3a644\u4e4b\u7c7b\uff1f\u53e6\u5916agent\u7684REDIS_UNIX_SOCK\u8fd9\u4e2a\u53c2\u6570\uff0c\u4fee\u6539\u540emake\u4e0d\u4e00\u5b9a\u751f\u6548--\u4e0d\u77e5\u9053\u4e3a\u5565\u3002\u4e5f\u53ef\u4ee5\u4fee\u6539\u53e6\u5916\u4e00\u4e2a\u6587\u4ef6\u5728agent\/src\/c\/service\/fsof_redis.c\u4e2d\uff0c\u4fee\u6539redis\u7684\u94fe\u63a5\u65b9\u5f0f\uff0c\u91cd\u65b0make\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"713\" height=\"270\" src=\"http:\/\/www.shuran.cn\/wp-content\/uploads\/2020\/02\/54733652-a3d0d400-4bd5-11e9-9c61-e9c1f8ba517e.png\" alt=\"\" class=\"wp-image-974\" srcset=\"https:\/\/www.shuran.cn\/wp-content\/uploads\/2020\/02\/54733652-a3d0d400-4bd5-11e9-9c61-e9c1f8ba517e.png 713w, https:\/\/www.shuran.cn\/wp-content\/uploads\/2020\/02\/54733652-a3d0d400-4bd5-11e9-9c61-e9c1f8ba517e-300x114.png 300w, https:\/\/www.shuran.cn\/wp-content\/uploads\/2020\/02\/54733652-a3d0d400-4bd5-11e9-9c61-e9c1f8ba517e-660x250.png 660w\" sizes=\"auto, (max-width: 713px) 100vw, 713px\" \/><\/figure>\n\n\n\n<p>3\u3001<br> config\/app\/conf\/dev\/provider\/demo-provider.deploy \u4fee\u6539\u4e3a\u5b9e\u9645\u73af\u5883\u503c<br> demo\/demo-consumer\/server\/Consumer.php\u4e2d\u4fee\u6539Logger.php\u503c<br> demo\/demo-provider\/server\/DemoServiceImpl.php\u4fee\u6539Logger.php\u503c<\/p>\n\n\n\n<p><br>\u4ee5consumer.php\u4e3a\u4f8b:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php                                                                                          \n$APP_SRC_PATH = __DIR__;\n\/\/echo $_SERVER&#91;'DOCUMENT_ROOT'];\nrequire_once $_SERVER&#91;'DOCUMENT_ROOT'].'\/vendor\/autoload.php';\n$fsofApiPath = dirname(dirname(dirname($APP_SRC_PATH))).DIRECTORY_SEPARATOR.'api'.DIRECTORY_SEPARATOR.'FSOFApi.php';\n\/\/echo $fsofApiPath;die;\nrequire_once($fsofApiPath);\nFSOFApi::configure('demo-consumer', $APP_SRC_PATH);\n\/\/use log4php\\Logger;\nrequire_once($_SERVER&#91;'DOCUMENT_ROOT'].'\/vendor\/apache\/log4php\/src\/main\/php\/Logger.php');\nLogger::configure(dirname(dirname(__FILE__)).'\/config\/log4php.xml');\ndate_default_timezone_set('PRC');\n\n\/\/php\u6846\u67b6\u8c03\u7528php\u63d0\u4f9b\u7684\u670d\u52a1\n$service = '\u4f60\u7684\u670d\u52a1';\n\/\/echo 3;\n$proxy = FSOFApi::newProxy($service, 3);\n\/\/echo 4;\n$ret = $proxy->invoke(\"\u4f60\u7684\u65b9\u6cd5\",\"\");\necho \"ret:$ret\".PHP_EOL;<\/code><\/pre>\n\n\n\n<p><br><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7cfb\u7edf\uff1aRed Hat 4.4.7-17 \u5185\u6838\uff1a2.6.32-642.el6.x86_64PHP\u7248\u672c\uff1aPHP-7\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.shuran.cn\/?p=969\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-969","post","type-post","status-publish","format-standard","hentry","category-php"],"_links":{"self":[{"href":"https:\/\/www.shuran.cn\/index.php?rest_route=\/wp\/v2\/posts\/969","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shuran.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shuran.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shuran.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shuran.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=969"}],"version-history":[{"count":5,"href":"https:\/\/www.shuran.cn\/index.php?rest_route=\/wp\/v2\/posts\/969\/revisions"}],"predecessor-version":[{"id":975,"href":"https:\/\/www.shuran.cn\/index.php?rest_route=\/wp\/v2\/posts\/969\/revisions\/975"}],"wp:attachment":[{"href":"https:\/\/www.shuran.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=969"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuran.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=969"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuran.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=969"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}