黑羊龙/笨蛋

PHP Dubbo 客户端在 Zookeeper 中

0.1.5 2018-10-16 08:56 UTC

This package is auto-updated.

Last update: 2024-09-16 22:17:33 UTC


README

Total Downloads Latest Stable Version Latest Unstable Version License

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)]);

字符串,我们可以简单地传递字符串,也可以使用 Type Class 显式传递

$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"
]);

以下是一个复杂远程调用的示例,我们建议在任意时刻使用 Type Class 包装数值类型(甚至所有数据类型)的原数据,这将是一种良好的习惯

$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 文件。