以zookeeper 为主的服务端与客户端要同时引入.proto文件并创建proxy.js,是不是增加了协同开发的成本和维护的便利性?假设现在有一个 gateway服务、a服务、b服务 这个三个服务,gateway服务要对外提供接口,那么就要融入a服务与b服务的.proto文件,不论a服务、b服务哪个服务增加接口,网关层都要跟随做修改,这样的强关联性并不利于维护与开发。不知是我对egg-sofa-node的理解不深入还是就是我所描述的这样?如果是我描述的这样,是否有其他的解决方式?
bxpogfeg1#
gateway 的玩法不会是这样的,网关需要的是泛化调用 和 SPI 调用规范。
jdzmm42g2#
gateway 的话,一般两种做法
cs7cruho3#
eggjs + zookeeper , 怎么实现完全泛化的?不需要引入.proto文件。直接在网关用这段话可以吗?
const consumer = app.rpcClient.createConsumer({ interfaceName: 'com.alipay.sofa.rpc.protobuf.aServer', targetAppName: 'aServer', version: '1.0', group: 'SOFA', proxyName: 'aServer', }); if (!consumer) { // `app.config['typeset_rpc.rpc.service.enable'] = false` will disable this consumer return; } app.beforeStart(async() => { await consumer.ready(); }); consumer.invoke('route func name', [ req ], { ctx: this.ctx, });
a0zr77ik4#
不行,至少要提供参数的签名,然后通过 JSON 序列化,最后在服务端进行类型恢复,这个是 dubbo 泛化调用的实现
af7jpaap5#
@gxcsoccer JSON序列化是 JSON.stringfy() 吗? 参数签名是为了服务端验证用吗?有没有可借鉴或使用的例子?如果 consumerA, consumerB都注册到gateway, 每个服务对外提供一个接口,接口参数包含方法名 和 一个json数据,可不可以?
const consumerA = app.rpcClient.createConsumer(...); const consumerB = app.rpcClient.createConsumer(...); // req: {fun_name: 'sayHello', data JSON.stringfy({ key, value })} consumerA.invoke('A_FUN', [ req ], { ctx: this.ctx, }); consumerB.invoke('B_FUN', [ req ], { ctx: this.ctx, });
5条答案
按热度按时间bxpogfeg1#
gateway 的玩法不会是这样的,网关需要的是泛化调用 和 SPI 调用规范。
jdzmm42g2#
gateway 的话,一般两种做法
cs7cruho3#
gateway 的话,一般两种做法
eggjs + zookeeper , 怎么实现完全泛化的?不需要引入.proto文件。直接在网关用这段话可以吗?
a0zr77ik4#
gateway 的话,一般两种做法
eggjs + zookeeper , 怎么实现完全泛化的?不需要引入.proto文件。直接在网关用这段话可以吗?
不行,至少要提供参数的签名,然后通过 JSON 序列化,最后在服务端进行类型恢复,这个是 dubbo 泛化调用的实现
af7jpaap5#
@gxcsoccer JSON序列化是 JSON.stringfy() 吗? 参数签名是为了服务端验证用吗?有没有可借鉴或使用的例子?如果 consumerA, consumerB都注册到gateway, 每个服务对外提供一个接口,接口参数包含方法名 和 一个json数据,可不可以?