简介
Dubbox是当当网对阿里的Dubbo进行增强的一个分支。在使用springboot之后,我们发现很多配置并不一定要使用xml。这篇文章的目的是让你使用Dubbox时能像使用springboot的其它功能一样可以在application.properties中配置。
基础整合
-
进入https://github.com/dangdangdotcom/dubbox ,将源码下载(当当网没有提交上maven仓库,所以不能直接从中央仓库依赖);打包进本地仓库
mvn clean install -Dmaven.test.skip
-
添加Maven依赖
<!-- zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- Dubbox --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.8.4</version> </dependency> <!-- springboot的注解处理器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
-
添加配置类
@Configuration public class DubboConfig { @Bean @ConfigurationProperties(prefix="dubbo.application") public ApplicationConfig applicationConfig() { ApplicationConfig applicationConfig = new ApplicationConfig(); return applicationConfig; } @Bean @ConfigurationProperties(prefix="dubbo.registry") public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); return registryConfig; } @Bean @ConfigurationProperties(prefix="dubbo.annotation") public AnnotationBean annotationBean() { AnnotationBean annotationBean = new AnnotationBean(); return annotationBean; } @Bean @ConfigurationProperties(prefix="dubbo.protocol") public ProtocolConfig protocolConfig() { ProtocolConfig protocolConfig = new ProtocolConfig(); return protocolConfig; } }
-
在application.properties中配置Dubbox属性
#应用名 dubbo.application.name= #负责人 dubbo.application.owner= #注册zookeeper的地址 dubbo.registry.address=zookeeper://localhost:2181 #扫包 dubbo.annotation.package=com.yeauty.service #协议 (有 dubbo、rest、http、hessian、webservice) dubbo.protocol.name=dubbo #协议暴露服务的端口(Integer类型) dubbo.protocol.port=20880
-
提供者与消费者
提供者注解(实现类上): @Service(包:com.alibaba.dubbo.config.annotation.Service) @Component(包:org.springframework.stereotype.Component) 消费者注解(Interface上): @Reference(包:com.alibaba.dubbo.config.annotation.Reference)
-
注意!!!
springboot的开发热部署包一定要去掉!不然会出BUG<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency>
现在已经可以正常使用了,若想进行扩展,可以继续往下~
指定序列化配置
-
添加Maven依赖
<dependency> <groupId>com.esotericsoftware.kryo</groupId> <artifactId>kryo</artifactId> <version>2.24.0</version> </dependency> <dependency> <groupId>de.javakaffee</groupId> <artifactId>kryo-serializers</artifactId> <version>0.26</version> </dependency>
-
application.properties中配置属性
#序列化方式(kryo是目前效率最高的) dubbo.protocol.serialization=kryo #序列化优化的实现类 dubbo.protocol.optimizer=
-
添加序列化实现类
public class SerializationOptimizerImpl implements SerializationOptimizer { public Collection<Class> getSerializableClasses() { List<Class> classes = new LinkedList<Class>(); return classes; } }
需要进行kryo序列化的类在这里add进list里面
详细可参考:https://dangdangdotcom.github.io/dubbox/serialization.html
Dubbox的REST支持
-
添加Maven依赖
<dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>3.0.7.Final</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-client</artifactId> <version>3.0.7.Final</version> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency> <!-- 如果要使用json序列化 --> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jackson-provider</artifactId> <version>3.0.7.Final</version> </dependency> <!-- 如果要使用xml序列化 --> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxb-provider</artifactId> <version>3.0.7.Final</version> </dependency>
-
在配置类中添加方法
@Bean @ConfigurationProperties(prefix="dubbo.protocol.rest") public ProtocolConfig protocolRestConfig() { ProtocolConfig protocolConfig = new ProtocolConfig(); return protocolConfig; }
-
application.properties中配置属性
dubbo.protocol.rest.name=rest dubbo.protocol.rest.port=8082 dubbo.protocol.rest.server=tomcat
更多属性配置和使用方法请参考:https://dangdangdotcom.github.io/dubbox/rest.html