sofastack / sofa-rpc

SOFARPC is a high-performance, high-extensibility, production-level Java RPC framework.
https://www.sofastack.tech/sofa-rpc/docs/Home
Apache License 2.0
3.83k stars 1.18k forks source link

支持在 Reference 级别设置服务注册中心的地址 #62

Closed xiaowan closed 6 years ago

xiaowan commented 6 years ago

1524805884945 看到reference里有关于这两个设置被注释掉了,是为什么?

leizhiyuan commented 6 years ago

@xiaowan 麻烦提供下这个 xsd文件的包位置.方便定位原因.

xiaowan commented 6 years ago

com/alipay/sofa/infra/config/spring/namespace/schema/rpc.xsd

leizhiyuan commented 6 years ago

@xiaowan 这个是https://github.com/alipay/sofa-rpc-boot-projects 这个项目来做 xml 解析的,我来看下

leizhiyuan commented 6 years ago

@xiaowan 看了一下

目前 filter 是允许配置的.你依然可以直接配置实用,但是在 ide 里面会飘红,

registry目前不开放对单个服务引用配置不同的服务注册中心.(只在配置中指定一个即可,每个服务配置不同的 registry 目前没有看到比较有意义的需求/使用场景)

之后,我们会将这个 filter 的 xsd 取消注释.但是registry暂时不会放开在 xsd 中.

如果有兴趣,欢迎提pr

xiaowan commented 6 years ago

嗯,其实就是遇到了某个服务指定特殊的服务注册中心的问题,看到文档里有registry这个参数,实际无法使用...

leizhiyuan commented 6 years ago

@xiaowan com/alipay/sofa/rpc/boot/runtime/adapter/helper/ConsumerConfigHelper.java 目前是服务注册中心从从配置中拿到的,目前是 local 和 zk. 因为不同的registry涉及到他的初始化.xml 中只能配置一个名字,但是这个初始化本身还是没有地方做.

方便说下你们这边为什么会对某个服务指定不同的配置中心么.

xiaowan commented 6 years ago

因为跨了部门,其他部分跟我们部分用的不是同一个服务注册中心....

leizhiyuan commented 6 years ago

@xiaowan 那你这个服务中心是自己实现的? 还是说只是不同的 zk 地址?

xiaowan commented 6 years ago

只是不同的zk地址

xiaowan commented 6 years ago

另外,可以加下你们的微信群吗,之前加了sofa的小助手,一直没有理我,issue的沟通方式感觉效率低了点...

leizhiyuan commented 6 years ago

@xiaowan 如果对方也是一个集群部署,目前这种确实是不支持,如果是单机,可以通过 directurl 来暂时解决.

我们要评估下这个需求的合理性.

leizhiyuan commented 6 years ago

@xiaowan 邮箱发我你的微信号.我来加你.

xiaowan commented 6 years ago

已发送

leizhiyuan commented 6 years ago

一种可行的方案.

在这里com.alipay.sofa.rpc.boot.container.RegistryConfigContainer#getRegistryConfig 允许传递不同的 key. 这个 key 是从你配置的这个registry中传递的

然后这里的处理逻辑是根据你的这个 key. 从application.properties中获取以

com.alipay.sofa.rpc.registry.address.+key 作为 key, 获取 registry 的完整配置,然后来初始化

这样使用的时候,只需要在application.properties配置 com.alipay.sofa.rpc.registry.address.zk1=xxx com.alipay.sofa.rpc.registry.address.zk2 =xxx

然后配置中指定zk1,zk2.这种

你看看有没有兴趣提个 pr 哈~

NeGnail commented 6 years ago

如果该服务没有对应的zk1,zk2配置,则获取全局的 com.alipay.sofa.rpc.registry.address 配置值。

xiaowan commented 6 years ago

@NeGnail 其实正想这么提来着,如果服务有指定配置中心,使用指定的配置中心,如果没有指定,使用默认的...

NeGnail commented 6 years ago

@xiaowan 是的。目前 RPC的Sterer 只获取了全局配置。 SOFA-RPC 本身是支持服务级别的注册中心配置的。 如果有兴趣,欢迎提个pr。不过要注意的是 xsd 的描述文件是在这个工程中 SOFABoot

leizhiyuan commented 6 years ago

这个 xsd 我们来改,不影响解析逻辑,只是 ide 会飘红.

leizhiyuan commented 6 years ago

@xiaowan xsd 我们已经修改并发布,可以 rebase 一下 https://github.com/alipay/sofa-rpc-boot-projects/ 的 master, 然后做相关开发即可.

leizhiyuan commented 6 years ago

@xiaowan 不知道这个功能怎么样了?有遇到什么困难么?

leizhiyuan commented 6 years ago

这个我来认领,在5.4.3中完成.