lvmama /
PHP Dubbo 客户端在 Zookeeper 中
dev-master
2018-01-15 16:39 UTC
Requires
- php: >=5.4
- icecave/flax: 0.1.*
This package is not auto-updated.
Last update: 2024-09-18 03:48:03 UTC
README
Dubbo 是一个分布式服务框架,通过高性能 RPC 使应用程序具有服务导入/导出能力。
这仅是 dubbo php 客户端实现。它目前只支持 Hessian。
您必须先启动 dubbo 和 zookeeper,然后注册提供者。
需求
如果您尚未安装 php 的 zookeeper 扩展,则
MacOS
$ brew install php56-zookeeper
Linux
$ sudo apt-get install php-pear php5-dev make $ sudo pecl install zookeeper
在安装 zookeeper 扩展时,可能会出现“zookeeper 支持需要 libzookeeper”的错误,您应该安装所需的 libzookeeper,并将 zookeeper.so 添加到您的 php.ini
$ cd ${YOUR_ZOOKEEPER_HOME_DIR}/src/c/ $ ./configure && make && sudo make install
Windows
Not currently supported, But you can through the source code compiled to a DLL
安装
使用以下命令安装最新版本:
$ composer require lornewang/idiot
用法
<?php use Idiot\Service; use Idiot\Type; $options = [ "conn" => "127.0.0.1:2181", "path" => "com.alibaba.dubbo.service.user", "version" => "1.0.0" ]; $service = new Service($options); $data = $service->invoke('getUserById', [951]);
数值参数将根据数值区域获取合适的数据类型,但通常这不准确。例如,远程服务请求是整数类型的数据,如果传递 951 这样的参数,客户端将自动映射到短整型,对于远程服务来说,这是一个强类型的服务,可能导致致命异常,此时我们需要客户端使用 类型类 显式传递参数值和数据类型(实际上这是我们推荐的方法,因为自动映射不可靠)。
$service->invoke("getUserById", [Type::int(951)]);
字符串,我们可以直接传递字符串,当然也可以使用类型类显式传递。
$service->invoke("getUserByName", ["Lorne"]); // you can also $service->invoke("getUserByName", [Type::string("Lorne")]);
当我们尝试将 Java 对象作为参数传递时,需要定义一个对象类型。
Type::object("com.alibaba.dubbo.parameter.user", [ "age": 20, "sex": "male" ]);
以下是一个复杂的远程调用的示例,我们建议在所有时候使用类型类包装原始数据,这将是一个好习惯。
$service->invoke("complex", [ Type::int(17263), Type::boolean(false), Type::string("male"), Type::double(16.25), Type::object("java.math.BigDecimal", 2367.299) ]);
支持的数据包装类型
Type::short($value); Type::int($value); Type::integer($value); Type::long($value); Type::float($value); Type::double($value); Type::bool($value); Type::boolean($value); Type::string($value); Type::object($class_name, $properties);
许可
Idiot 在 MIT 许可证下发布 - 有关详细信息,请参阅 LICENSE
文件。