通过内容寻址的方式,获取接口的唯一hash,这样就可以实现像本地函数一样的使用远程接口。
接口
import { Observable } from 'ims-rxjs';
export abstract class ImsDemo {
abstract getIndex(name: string): Observable<any>;
abstract getIndex2(name: string): Observable<any>;
}
复制代码
nodejs
import { Injectable, Logger } from 'ims-core';
import { of } from 'ims-rxjs';
@Injectable()
export class ImsDemoImplClient extends ImsDemo {
constructor(public logger: Logger) {
super();
}
getIndex(name: string) {
this.logger.info(`request ImsDemo getIndex: ${name}`);
return of({
demo: 'test',
name: name,
});
}
getIndex2(name: string) {
this.logger.info(`request ImsDemo getIndex2: ${name}`);
return of({
demo: 'test',
name: name,
});
}
}
// 服务端大体过程
// 1.将ImsDemo提取hash特征,获取服务端地址hash
// 2.实例化接口实例
// 3.注册服务地址
// 4.返回服务处理结果
let instance = new ImsDemoImplClient(logger)
app.use(`/${hash}/:method`,(req,res,next)=>{
let method = req.params.method;
let result = instance[method](...req.body);
res.end(result)
})
复制代码
客户端
// 1.将ImsDemo提取hash特征,获取服务端地址
// 2.拼接地址`/${hash}/${method}`
// 3.发送请求,请求附带参数是params
// 4.收到回复得到结果
injector.get(ImsDemo).getIndex('ims').subscribe(res=>{
console.log('http请求结果是',res)
})
复制代码