Dubbo学习笔记之一——背景、框架、快速使用

背景:

SOA框架中,能够根据需求经过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,能够直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。算法

dubbo能作为咱们作什么? 提供服务注册中心,动态的注册和发现服务,使服务的位置透明。并经过在消费方获取服务提供方地址列表,实现软负载均衡和Failover,下降对F5硬件负载均衡器的依赖,也能减小部分红本。简单来讲,就是提供一个基于集群的RPC框架(包括负载均衡,服务动态注册和发现等)spring

架构:

节点角色说明:缓存

  • Provider: 暴露服务的服务提供方。
  • Consumer: 调用远程服务的服务消费方。
  • Registry: 服务注册与发现的注册中心。
  • Monitor: 统计服务的调用次调和调用时间的监控中心。
  • Container: 服务运行容器。

调用关系说明:网络

  • 0. 服务容器负责启动,加载,运行服务提供者。
  • 1. 服务提供者在启动时,向注册中心注册本身提供的服务。
  • 2. 服务消费者在启动时,向注册中心订阅本身所需的服务。
  • 3. 注册中心返回服务提供者地址列表给消费者,若是有变动,注册中心将基于长链接推送变动数据给消费者。
  • 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,若是调用失败,再选另外一台调用。
  • 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

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接口。

相关文章
相关标签/搜索