SpringBoot整合Dubbox(无XML配置)

来源:互联网 发布:c语言头文件里写什么 编辑:程序博客网 时间:2024/05/17 08:10

简介

Dubbox是当当网对阿里的Dubbo进行增强的一个分支。在使用springboot之后,我们发现很多配置并不一定要使用xml。这篇文章的目的是让你使用Dubbox时能像使用springboot的其它功能一样可以在application.properties中配置。

基础整合

  • 进入https://github.com/dangdangdotcom/dubbox ,将源码下载(当当网没有提交上maven仓库,所以不能直接从中央仓库依赖);打包进本地仓库
mvn clean install -DskipTests
  • 添加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

注:未经同意不得转载
原创粉丝点击