dubbo框架基础知识

服务中心

nacos服务中心

dubbo服务nacos高可用地址配置

  1. # dubbo 集群配置
  2. dubbo.registry.address=nacos://127.0.0.1:8848?backup=127.0.0.1:8849,127.0.0.1:8850
  3. # spring cloud 集群配置
  4. spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850

nacos注册机制

  • 反注册,使用kill 15 停止,dubbo会主动反注册nacos,从nacos去除服务地址

异常处理

dubbo的异常处理类是com.alibaba.dubbo.rpc.filter.ExceptionFilter 类,归纳下对异常的处理分为下面几类:

1)如果provider实现了GenericService接口,直接抛出

2)如果是checked异常,直接抛出

3)在方法签名上有声明,直接抛出

4)异常类和接口类在同一jar包里,直接抛出

5)是JDK自带的异常,直接抛出

6)是Dubbo本身的异常,直接抛出

7)否则,包装成RuntimeException抛给客户端

问题

  1. @DubboReference(version = “1.0”, group = “${dubbo.group}”, interfaceClass = IApiService.class)

在一个spring mvc项目中,使用DubboReference注解注入dubbo服务,但是项目启动时报错,group不支持${dubbo.group},
经过debug,发现Dubbo源码 com.alibaba.spring.util.AnnotationUtils$getAnnotationAttributes 中 attributes = getAnnotationAttributes(annotatedElement, annotationType, propertyResolver, ignoreDefaultValue, ignoreAttributeNames);

propertyResolver 参数缺少dubbo.group,发现是由于spring通过xml文件配置方式配置的 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer, 不会自动注入到propertyResolver ,改为使用@Configuration
@PropertySource(value = {“classpath:dubbo_config.properties”})
public class SpringDubboConfiguration {

}
加载配置,成功替换占位符 ${dubbo.group}