基于zookeeper+dubbo+spring的分布式架构

这种架构的教程网上想必应该是比比皆是了,不过今天想自己尝试一下。

首先是部署注册中心,具体步骤就不再过多赘述。在注册中心部署完成后,就开始provider的部署

先引入jar包


基于zookeeper+dubbo+spring的分布式架构_第1张图片

这里我的jdk版本是1.8,所以zkclient和dubbo都使用的最新版本,否则会报错,原因是因为内部依赖的javaassist不兼容。

然后就是划分项目结构

基于zookeeper+dubbo+spring的分布式架构_第2张图片

我用的maven做的项目结构划分,服务提供模块和消费模块都依赖于业务模块,服务提供模块主要是向注册中心注册服务,而消费模块主要是调用服务,


基于zookeeper+dubbo+spring的分布式架构_第3张图片

这是我理解的spring与dubbo之间的关系,首先一个业务需要抽象出一个接口,然后再进行实现。

现在spring一般都是直接配置扫描+注解的方式,所以在服务提供者中,要在实现类上加上相应的service注解。这里spring首先把类加载进容器中,然后再把这个加载好的类交给dubbo,dubbo把这个类的接口已经它的方法一起注册到注册中心去。

基于zookeeper+dubbo+spring的分布式架构_第4张图片

注册成功后,接下来就是消费者调用服务,调用的流程正好跟注册是相反的,首先是由dubbo从注册表中加载需要的类,然后再将这个装载成功的类交给spring容器使用(这里加载我猜是虚拟加载,让spring相信真实存在这样一个已经加载好的类,其实它的实体在provider那里)。然后我们就可以开心的使用spring干各种坏事了。

消费模块调用

然而需要注意的是,我们因为习惯于使用spring的扫描,要对消费者模块和提供者模块的包路径扫描做好区分,比如正确的路径是消费者模块:com.company.web,提供者模块:com.company.provider

如果偷懒的话消费者模块的扫描路径设置为:com.company,那么在消费者模块会出现bean重复加载的情况,spring会报错,原因是dubbo加载一个给spring,spring自己又扫描加载一次。所以在消费者模块注意不要把服务的实现类给扫描进去。

通过以上简单的几个步骤基本上已经把一个简单的分布式架构系统搭好了,至于你是选择放在一个服务器上还是多个服务器上,那得看你的资源是否丰富了。

你可能感兴趣的:(基于zookeeper+dubbo+spring的分布式架构)