问题:
1、项目名称最好不要有provider consumer之类的信息,一个项目可以是服务提供者也可以同时是消费者
<dubbo:application> | name | application | string | 必填 |
| 服务治理 | 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样,此参数不是匹配条件,你当前项目叫什么名字就填什么,和提供者消费者角色无关,比如:kylin应用调用了morgan应用的服务,则kylin项目配成kylin,morgan项目配成morgan,可能kylin也提供其它服务给别人使用,但kylin项目永远配成kylin,这样注册中心将显示kylin依赖于morgan |
2、owner可以设置成当前维护该子系统的人的前缀【建议】
<dubbo:application> | owner | owner | string | 可选 |
| 服务治理 | 应用负责人,用于服务治理,请填写负责人公司邮箱前缀 |
3、如果出现由于docker或者私有云网络环境造成application之间无法连通的问题,可以在dubbo:protocol中的host和port中指定监听的端口,但首先要能够监听到这个端口,可以用于解决双网卡问题。这个方案需要修改配置,可以考虑提供javaagent扩展的方式在运行时指定。
<dubbo:protocol> | port | <port> | int | 可选 | dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80 如果配置为-1 或者 没有配置port,则会分配一个没有被占用的端口。Dubbo 2.4.0+,分配的端口在协议缺省端口的基础上增长,确保端口段可控。 | 服务发现 | 服务端口 | 2.0.5以上版本 |
<dubbo:protocol> | host | <host> | string | 可选 | 自动查找本机IP | 服务发现 | -服务主机名,多网卡选择或指定VIP及域名时使用,为空则自动查找本机IP,-建议不要配置,让Dubbo自动获取本机IP |
4、当application同时具备provider和consumer身份时,可能会出现启动循环依赖问题,可以在dubbo:consumer设置启动不检查依赖
<dubbo:consumer> | check | check | boolean | 可选 | true | 服务治理 | 启动时检查提供者是否存在,true报错,false忽略 |
5、async问题:
<dubbo:service> | async | async | boolean | 可选 | false | 性能调优 | 是否缺省异步执行,不可靠异步,只是忽略返回值,不阻塞执行线程 |
<dubbo:reference> | async | async | boolean | 可选 | 缺省使用<dubbo:consumer>的async | 性能调优 | 是否异步执行,不可靠异步,只是忽略返回值,不阻塞执行线程 |
callback与async功能正交分解:
async=true,表示结果是否马上返回.
onreturn 表示是否需要回调.
组合情况:(async=false 默认)
异步回调模式:async=true onreturn="xxx"
同步回调模式:async=false onreturn="xxx"
异步无回调 :async=true
同步无回调 :async=false
6、请求过大的问题:
<dubbo:protocol> | payload | payload | int | 可选 | 88388608(=8M) | 性能调优 | 请求及响应数据包大小限制,单位:字节 |
7、服务一旦注册到服务中心,调用时并不一定会通过本地jar或war包,可能在1.18的A application调用自己的一个服务会调用到1.19的A application的provider
8、validation问题:
<dubbo:consumer> | validation | validation | boolean | 可选 |
| 服务治理 | 是否启用JSR303标准注解验证,如果启用,将对方法参数上的注解进行校验 |
<dubbo:reference> | validation | validation | boolean | 可选 |
| 服务治理 | 是否启用JSR303标准注解验证,如果启用,将对方法参数上的注解进行校验 | Dubbo2.1.0及其以上版本支持 |