之前我们使用集中式框架。耦合性很高,无法水平扩展,实现集群。
Controller->Service->Dao
而分布式的框架 就是 解决集中式框架的这一问题。
但是如果根据功能拆分,进行集群,会需要写 很多重复的相同方法。(不同的controller方法会调用一个service)
那么我们进行水平拆分。
将页面控制层controller拆分出来,service和dao作为服务层
这样其实也有一些问题:
1.当服务越来越多,调用服务的url越来越难管理
2.当调用服务量越来越大,很难确定服务需要多少机器支撑,什么时候增加机器
Dubbo就是资源调度和治理中心,解决上面的问题。
它是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案。
是阿里SOA服务化治理方案的核心框架。
1.服务提供者,在启动的时候,向注册中心注册自己提供的服务。
2.服务消费者,在启动的时候,向注册中心订阅自己需要的服务。
3.注册中心返回服务提供者地址列表,给消费者。如果变更,注册中心将基于长连接退送变更数据给消费者。
4.服务消费者,从提供者地址列表中,基于负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台
5.服务消费者 和 服务提供者,在内存累积调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
使用:
我们提供在testServiceImpl
1.在配置文件头部配置dubbo约束
2.加入dubbo.xsd约束文件
将服务提供出去。(服务端 IP 1.1机器)
在springMvc.xml中配置(消费端 1.2 机器 想要引用上面 1.1的服务)
<!-- 配置dubbo服务 -->
<dubbo:application name="xxx-manager-web" />
<!-- 使用广播 -->
<dubbo:registry address="multicast://224.5.6.7:1234" />
<!-- 声明要调用的服务,timeout是设置连接超时最长时间,如果不设置,默认一秒超时,重试3次 -->
<dubbo:reference interface="com.xxx.TestService"
id="testService" timeout="1000000" />
例子:
一般生产环境就是将这个服务类,打包成jar发布到服务器,使用main来启动服务。
消费者:
reference的interface必须和服务端的 暴露接口一模一样。