
概述:
Spring Dubbo 是我自己写的一个基于spring-boot和dubbo,目的是使用Spring boot的风格来使用dubbo。(即可以了解Spring boot的启动过程又可以学习一下dubbo的框架)
项目介绍:
github: https://github.com/Athlizo/spring-dubbo-parent
码云: https://git.oschina.net/null_584_3382/spring-dubbo-parent
有兴趣的朋友可以一起交流学习。
1 现在是怎么启动dubbo
1.1 依赖dubbo jar包
如果不使用dubbo的spring框架,在maven依赖dubbo的时候配置就如下,dubbo 2.5.3的spring 框架版本还停留在2.5.6。
<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency>
1.2 dubbo的配置:
1.2.1 通过配置文件:
现在的启动方式也很简单,使用dubbo提供的com.alibaba.dubbo.container.Main方法,在classpath下面加入配置文件dubbo.properties,例如:
dubbo.container=spring dubbo.spring.config=classpath*:spring-all.xml dubbo.registry=zookeeper://localhost:12181 dubbo.port=20882
其中 spring-all.xml 就是我们配置spring的文件。如果不配置,默认是从META-INF.spring中读取xml文件
1.2.2 通过spring的xml中
也就是直接在xml配置中配置,例如
<dubbo:application name="${dubbo.appname}"/> <dubbo:registry address="${dubbo.registry}"/> <dubbo:protocol name="dubbo" port="${dubbo.port}"/>
1.3 dubbo bean
可以通过xml和注解的方式来声明,就不在赘述(用过dubbo的都知道)
2. 存在的问题(前提是使用Spring Boot来启动dubbo服务)
2.1 dubbo的配置
dubbo的文件路径是固定的,也就是classpath下的dubbo.properties
2.2 dubbo bean
只能通过xml来配置,然后通过@ImportResource来引入配置xml文件。这个和spring boot风格不搭
2.3 使用dubbo的扩展
2.3.1 dubbo扩展定义
要使用dubbo的扩展功能(最常用的就是filter,已定义一个自己的filer为例子),必须按照他的要求来,首要要在指定目录下创建一个扩展的文件配置类,【路径写死了的】,代码为证:
private static final String SERVICES_DIRECTORY = "META-INF/services/"; private static final String DUBBO_DIRECTORY = "META-INF/dubbo/"; private static final String DUBBO_INTERNAL_DIRECTORY = DUBBO_DIRECTORY + "internal/"; loadFile(extensionClasses, DUBBO_INTERNAL_DIRECTORY); loadFile(extensionClasses, DUBBO_DIRECTORY); loadFile(extensionClasses, SERVICES_DIRECTORY); 然后在文件里面加入加入我们定义的filter
mymock=com.alibaba.dubbo.config.spring.filter.MockFilter
然后在创建一个这样的类 实现filter接口。加上@Activate注解。
2.3.2 dubbo扩展的使用
dubbo的扩展都是通过反射来获取的,那么要在构造的时候加入一些参数显然也就不可能。并且不是bean也不是通过spring 来管理,要使用@Autowire等也不行。
spring mvc中的filter,只要创建一个filter的bean就能生效。
2.4 我想想先
3 spring boot化的dubbo服务
优点就是:spring boot风格
缺点就是:如果你不认spring boot,那么都是缺点