最近为了熟悉Dubbo远程过程调用架构的使用,并结合SSM+Maven整合了简单的一套项目实战
直接看项目结构图
各模块介绍
dubbo-common:存放项目需要的公众类,像查询模型、数据库实体模型等
dubbo-config:存放项目所需的公众配置文件,像日志、数据库连接信息配置文件等
dubbo-customer:Dubbo框架的服务消费方,也是http请求的入手
dubbo-interface:存放连接服务消费方和服务提供方的公共接口
dubbo-parent:存放整个项目所需的依赖,是其他模块的父类
dubbo-provide:Dubbo框架的服务提供方,负责处理业务逻辑和数据库请求
一般也有人把数据库操作单独整合成一个模块(dubbo-dao),其实都一样…
前置工作:安装注册中心Zookeeper,我选择的是在linux系统下安装,安装步骤详情网上有很多教程
注意:安装配置完之后记得打开该linux系统2181端口的防火墙
具体代码实现细节这里就不过多介绍了,这算是Dubbo最简单的入门应用了吧。
讲一下我在使用过程中遇到的一些问题:
-
要将dubbo-common中的实体模型,查询模型等实现序列化接口(就是在服务消费方和服务提供方之间传递或使用的对象)
-
com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response...
简单地说就是dubbo服务超时
dubbo默认的时间是500ms,超过这个时间它会重新访问service层,最多尝试三次所以就发生了下面的一个很奇怪的现象:
我第一次在浏览器访问服务消费方的接口,报500这个com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response...
异常(连接服务提供方超时)
但是第二次回车,居然就访问成功了(访问服务提供方没有超时) -
设置超时时间:
规则:
1.Consumer端配置优于Provider配置,优于全局配置;
2.方法级配置别优于接口级别优于全局配置;
根据规则1,纵使消费端配置优于服务端配置,但消费端配置超时时间不能随心所欲,需要根据业 务实际情况来设定。如果超时时间设置得太短,复杂业务本来就需要很长时间完成,服务端无法在设 定的超时时间内完成业务处理;如果超时时间设置太长,会由于服务端或者网络问题导致客户端资源大量线程挂起
Dubbo服务消费端,全局超时配置
<dubbo:consumer timeout=“5000” />Dubbo服务消费端指定接口或者接口中方法配置超时
<dubbo:reference interface=“com.fei.CustomerrService” timeout=“3000”>
<dubbo:method name=“sayHello” timeout=“5000” />
</dubbo:reference>Dubbo服务提供端,全局超时配置
<dubbo:provide timeout=“5000” />Dubbo服务提供端指定接口或者接口中方法配置超时
<dubbo:service interface=“com.fei.CustometService” timeout=“3000”>
<dubbo:method name=“sayHello” timeout=“5000” />
</dubbo:service>