SOA框架中,能够根据需求经过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,能够直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。算法
dubbo能作为咱们作什么? 提供服务注册中心,动态的注册和发现服务,使服务的位置透明。并经过在消费方获取服务提供方地址列表,实现软负载均衡和Failover,下降对F5硬件负载均衡器的依赖,也能减小部分红本。简单来讲,就是提供一个基于集群的RPC框架(包括负载均衡,服务动态注册和发现等)spring
节点角色说明:缓存
调用关系说明:网络
1.注册中心,服务提供者,服务消费者三者之间均为长链接,而且只有在服务提供者和服务消费者启动的时候才会与注册中心交互。当服务提供者发生改变时,注册中心会自动推消息给服务消费者。架构
2.注册中心,服务提供者都是以集群的方式提供服务,而且集群中某一台机子宕机不会影响集群提供服务。集群可动态增长机器部署实例。app
3.注册中心和监控中心都是可选的,服务消费者能够直连服务提供者。当注册中心所有宕机的时候,不会影响服务消费者使用,由于消费者本地缓存了服务列表(不能在感知服务提供者变化)。负载均衡
Dubbo官方推荐使用基于Spring的配置方法,所以第一步是配置dubbo配置文件,而且在spring启动时候加载这个配置文件:框架
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="hello-world-app" /> <!-- 使用multicast广播注册中心暴露服务地址 --> <dubbo:registry address="multicast://224.5.6.7:1234" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> </beans>
在Spring中,在xxxAction中注入了一个xxxService,配置一个服务Bean的方式以下:分布式
<bean id=“xxxService” class=“com.xxx.XxxServiceImpl” /> <bean id=“xxxAction” class=“com.xxx.XxxAction”> <property name=“xxxService” ref=“xxxService” /> </bean>
而使用Dubbo,因为xxxService不在本地,而是一个远程调用,所以配置分为服务提供者和服务消费者配置ide
在服务提供者中,配置文件以下,
<bean id=“xxxService” class=“com.xxx.XxxServiceImpl” /> <!-- 和本地服务同样实现远程服务 --> <dubbo:service interface=“com.xxx.XxxService” ref=“xxxService” /> <!-- 增长暴露远程服务配置 -->
服务消费者:
<dubbo:reference id=“xxxService” interface=“com.xxx.XxxService” /> <!-- 增长引用远程服务配置 --> <bean id=“xxxAction” class=“com.xxx.XxxAction”> <!-- 和本地服务同样使用远程服务 --> <property name=“xxxService” ref=“xxxService” /> </bean>
这样就能够简单的实现一个dubbo远程调用,虽然可使用基于注解的方式,不过我的更推荐使用xml配置方式,这样至少在对代码是没有侵入。
惟一不足的是,服务消费者须要有服务提供的API接口。