dubbo-client-zookeeper-hessian
Version:
dubbo的hessian协议、zookeeper中心客户端
107 lines (87 loc) • 4.59 kB
Markdown
#特性
1. 通过hessian协议调用dubbo服务,同时使用zookeeper client来订阅服务通知,注冊消費者
2. 通过读取java.class来初始化接口、方法、实体类,调用java服务时,自动修正方法参数类型和类的属性。
3. 使用Promise模式
4. zookeeper发生变化时,自动通知客户端并触发对应的事件
# 安装
`npm install dubbo-client-zookeeper-hessian --save`
# 使用前提
1. 安装JDK,配置环境变量,确保javap命令正常使用;
2. 在项目根目录创建文件夹 : interface,将希望调用的java 接口class复制到 interface/service 目录,将涉及到的实体类class复制到 interface/domain
# 如何试用
## 初始化
``` javascript
let dubbo = require('dubbo-client-zookeeper-hessian');
/** 初始化参数是json对象,key的含义如下:
* name(app标识),
* zk(注册中心地址 ip:port
* host 本机IP
* connectTimeout 连接超时时间,
* retries 错误重试次数
* dubbo_version(展示到注册中心的消费者dubbo版本,默认2.8.4),
* service_version(服务版本,默认为任意版本,不为空时在ZK中心只获取指定版本的服务),
* service_group = '_service'(服务分组,默认dubbo,这也是dubbo服务端在不指定分组时的默认分组)
* strictString = true(是否过滤所有提交字符串中的script/frame等)
* host(固定调用的服务器地址ip,不传表示调用任意地址,例如 10.0.0.1表示只调用10.0.0.1上的服务)
* username zk用户名
* password zk密码
* data 数据处理方法,如果不传则将服务端返回的数据原生不动返回,该方法将接收一个参数,即服务器返回的数据;允许直接throw异常
*/
dubbo.one(参数);
```
## 调用java方法
```javascript
//ApplicationService=接口名称,getList=方法名称
dubbo.service.ApplicationService.getList(1,10).then(data => {
//接收到的数据
}).catch(error => {
//触发的异常
})
```
## 参数自动修正
hessian协议要求方法的参数必须一致,例如参数定义为int,如果传字符串肯定报错,本工具可以自动修正类型以防错误
```javascript
//自动将 '1' 修正 为 1
dubbo.service.ApplicationService.getList('1',10).then(data => {
//接收到的数据
}).catch(error => {
//触发的异常
})
//自动将 '1' 修正 为 1
dubbo.service.PriceService.insert({
price : '20', //如果定义的实体类属性为int,则自动修正为int,如果定义的类型为Float或者BigDecimal,则自动修正为对应的类型
name : '第一个价格'
}).then(data => {
//接收到的数据
}).catch(error => {
//触发的异常
})
```
## 读取数据
1. Float和BigDecimal从java传过来后,数据变为 {value : 数字}
2. java的Map将转换为js的Map,不能直接对象.属性,而是对象.get('属性')
## 新建一个实体类
可以通过`dubbo.domain.对象名()` 得到一个空的对象,对象的属性都是默认值,例如字符串=一个空的字符串,数字=0
## 事件调用
``` javascript
let dubbo = require('dubbo-client-zookeeper-hessian');
dubbo.on('事件名',() => {
});
```
事件列表
|名称 | 含义 | 参数 |
| -------- | ----- | ---- |
|all|接口全部读取完毕同时都已订阅zookeeper时触发|无|
|接口名称(仅类名)|该接口class读取完毕并订阅zookeeper时触发(如果class文件发生变化、zookeeper节点发生变化时也会触发)|该接口的服务器host列表|
|node|已订阅zookeeper上所有接口时触发|无
|node-接口名称(仅类名)|订阅该接口的zookeeper时触发(zookeeper节点发生变化时也会触发)|该接口的服务器host列表
|data|接收到服务器数据时触发|json对象,key包含host(服务器地址),className(接口名),methodName(方法名),param(参数),time(耗时),data(数据)|
|error|发生异常时触发|json对象,key包含host(服务器地址),className(接口名),methodName(方法名),param(参数),time(耗时),error(错误)|
## 错误信息
错误信息都是一个json对象,key的含义:
state=错误编码和message=错误消息
内置的错误码:
101006 参数不符
101002 找不到节点
101005 连接失败
101004 服务端异常