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

背景:

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

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

架构:

133916_zem8_3039671.png

节点角色说明:

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

调用关系说明:

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

1.注册中心,服务提供者,服务消费者三者之间均为长连接,并且只有在服务提供者和服务消费者启动的时候才会与注册中心交互。当服务提供者发生改变时,注册中心会自动推消息给服务消费者。

2.注册中心,服务提供者都是以集群的方式提供服务,并且集群中某一台机子宕机不会影响集群提供服务。集群可动态增加机器部署实例。

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不在本地,而是一个远程调用,因此配置分为服务提供者和服务消费者配置

在服务提供者中,配置文件如下,


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

转载于:https://my.oschina.net/u/3039671/blog/799624

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值