dubbox配置步骤:
1:https://github.com/alibaba/dubbo 下载dubbox源码
2:使用mvn 编译:
将下载的源码包解压,在解压的文件夹上Shift+鼠标右键,选择“在此处打开命令窗口”,在cmd中执行:mvn install -Dmaven.test.skip=true
等待编译完成,时间有点长,编译完成后将要用到的jar包放入maven仓库
3:配置dubbo-admin管理界面
从编译的dubbo文件夹中拿到dubbo-admin-2.8.4.war包,放在tomcat的webapps/ROOT下,然后进行解压,然后到webapps/ROOT/WEB-INF下,有一个dubbo.properties文件,修改配置文件 ,将zookeeper集群地址写入。
然后启动tomcat服务,用户名和密码:root,并访问服务,显示登陆页面,说明dubbo-admin部署成功
4:dubbox与Spring的整合
父工程:parent.pom
(1)在pom文件中加入以下依赖:
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.15.0-GA</version>
</dependency>
Ps:没有该依赖会报以下错误
<!--zookeeper-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.8</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!--dubbox Rest调用核心jar包-->
<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>
<!--数据校验,2个依赖是一起的,没有容器起不来-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.3.Final</version>
</dependency>
Ps:没有该依赖会报以下错误
Rest风格实现远程调用的序列化JAR包
<!-- 如果要使用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>
(2)在dubbox服务接口中加入以下依赖: dubbox.pom
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.8.4</version>
</dependency>
<!-- dubbox的servlet,相当于springmvc -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
Ps: <scope>provided</scope>必须加,没有该依赖会报以下错误:
<!-- javax注解包,如@Consumes,@Produces,@Path,@GET -->
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.2</version>
</dependency>
<!-- java对象与json 相互转化jar包-->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.12</version>
</dependency>
</dependencies>
(3)dubbox服务提供者Provider和消费者Consumer都继承parent,依赖dubbox接口
(4)提供者Provider的xml配置文件:
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="dubbo-provider" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://192.168.228.141:2181?backup=192.168.228.141:2182,192.168.228.141:2183" />
<!-- 启用rest协议 -->
<dubbo:protocol name="rest" threads="500" port="8074" contextpath="/" server="servlet" accepts="500"
extension="com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.dubbo.service.DemoService" ref="demo" protocol="rest" timeout="10000"/>
<!-- 具体的实现bean -->
<bean id="demo" class="com.dubbo.service.DemoServiceImpl"/>
(5)消费者consumer的xml配置文件:
<!--消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="dubbo-consumer"/>
<!--zookeeper注册中心 -->
<dubbo:registry address="zookeeper://192.168.228.141:2181?backup=192.168.228.141:2182,192.168.228.141:2183" />
<!-- 是否检查,如果true,当容器起来时,去zk中检查提供者必须正常。如果服务不在,退出。容器启动失败 -->
<dubbo:reference check="false" id="demoService" interface="com.dubbo.service.DemoService" timeout="10000"/>
(6)启动provider和consumer:
到dubbo-admin管理页面,不出意外应该可以看到服务都有了
PS如果测试调用方法时出现以下错误:
异常原因未知
解决方法:将Provider.xml文件中
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.dubbo.service.DemoService" ref="demo" protocol="rest" timeout="10000"/>
的protocol="rest" 改为protocol="dubbo"
5.扩展dubboxJAR包:(根据需求自行导入)
<!-- 如果要使用netty server -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-netty</artifactId>
<version>3.0.7.Final</version>
</dependency>
<!-- 如果要使用Sun HTTP server -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jdk-http</artifactId>
<version>3.0.7.Final</version>
</dependency>
<!-- 如果要使用tomcat server -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>8.0.11</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
<version>8.0.11</version>
</dependency>
Kyro序列化
<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>
FST序列化
<dependency>
<groupId>de.ruedigermoeller</groupId>
<artifactId>fst</artifactId>
<version>1.55</version>
</dependency>
Jackson序列化
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.3</version>
</dependency>
Dubbox其他远程调用方式依赖jar包
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>org.glassfish.grizzly</groupId>
<artifactId>grizzly-core</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.39</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.bsf</groupId>
<artifactId>bsf-api</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.8</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.googlecode.xmemcached</groupId>
<artifactId>xmemcached</artifactId>
<version>1.3.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-simple</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.8.0</version>
</dependency>
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.7</version>
</dependency>