簡(jiǎn)介
Dubbox是當(dāng)當(dāng)網(wǎng)對(duì)阿里的Dubbo進(jìn)行增強(qiáng)的一個(gè)分支莉撇。在使用springboot之后州叠,我們發(fā)現(xiàn)很多配置并不一定要使用xml。這篇文章的目的是讓你使用Dubbox時(shí)能像使用springboot的其它功能一樣可以在application.properties中配置斋扰。
基礎(chǔ)整合
- 進(jìn)入https://github.com/dangdangdotcom/dubbox 陵刹,將源碼下載(當(dāng)當(dāng)網(wǎng)沒(méi)有提交上maven倉(cāng)庫(kù),所以不能直接從中央倉(cāng)庫(kù)依賴)碾盐;打包進(jìn)本地倉(cāng)庫(kù)
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屬性
#應(yīng)用名
dubbo.application.name=
#負(fù)責(zé)人
dubbo.application.owner=
#注冊(cè)zookeeper的地址
dubbo.registry.address=zookeeper://localhost:2181
#掃包
dubbo.annotation.package=com.yeauty.service
#協(xié)議 (有 dubbo晃跺、rest、http毫玖、hessian掀虎、webservice)
dubbo.protocol.name=dubbo
#協(xié)議暴露服務(wù)的端口(Integer類型)
dubbo.protocol.port=20880
- 提供者與消費(fèi)者
提供者注解(實(shí)現(xiàn)類上):
@Service(包:com.alibaba.dubbo.config.annotation.Service)
@Component(包:org.springframework.stereotype.Component)
消費(fèi)者注解(Interface上):
@Reference(包:com.alibaba.dubbo.config.annotation.Reference)
- 注意!8斗恪烹玉!
springboot的開(kāi)發(fā)熱部署包一定要去掉!不然會(huì)出BUG
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
現(xiàn)在已經(jīng)可以正常使用了励背,若想進(jìn)行擴(kuò)展春霍,可以繼續(xù)往下~
指定序列化配置
- 添加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
#序列化優(yōu)化的實(shí)現(xiàn)類
dubbo.protocol.optimizer=
- 添加序列化實(shí)現(xiàn)類
public class SerializationOptimizerImpl implements SerializationOptimizer {
public Collection<Class> getSerializableClasses() {
List<Class> classes = new LinkedList<Class>();
return classes;
}
}
需要進(jìn)行kryo序列化的類在這里add進(jìn)list里面
詳細(xì)可參考: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
更多屬性配置和使用方法請(qǐng)參考:https://dangdangdotcom.github.io/dubbox/rest.html