分布式框架Dubbo入门

Dubbo简介

Dubbo是一个Alibaba开源的分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。dubbo就是个服务框架,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求说白了就是个远程服务调用的分布式框架,基于WebService。并且Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

Dubbo架构

说明:

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

调用关系说明:

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

通过调用关系我们知道注册中心在整个项目中起到了一个中介和调度的作用,非常重要,关于注册中心官方推荐使用ZooKeeper ,下面了解一下ZooKeeper

ZooKeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现

为什么使用ZooKeeper

Zookeeper是Apacahe Hadoop的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,可用于生产环境,并推荐使用

ZooKeeper安装

官网下载解压包,官网地址:http://zookeeper.apache.org/

Windows

Windows下Zookeeper不需要安装,直接运行解压完文件中的bin/zkServer.cmd即可启动成功

Linux

  1. 安装jdk
  2. 先将下载的zookeeper-3.3.6.tar.gz上传到linux系统。
  3. 解压缩压缩包 tar -zxvf zookeeper-3.4.6.tar.gz
  4. 进入zookeeper-3.4.6目录,创建data文件夹。
  5. zoo_sample.cfg改名为zoo.cfg 命令:mv zoo_sample.cfg zoo.cfg
  6. 修改zoo.cfg 中的dataDir属性,属性为上面新建data文件夹路径(进入data文件夹,然后使用pwd则可以显示全部路径)
  7. 进入bin目录 启动:./zkServer.sh start 关闭:./zkServer.sh stop 查看状态./zkServer.sh status
  8. 需要关闭防火墙

配置Dubbo

使用的时候需要保证两个项目中有相同的服务接口,即调用的服务类要实现接口,这个接口两个项目中都需要存在。

两个项目也都需要引入dubbo的jar和配置好Spring

  1. 引入对应的jar , 已经配置好Spring maven:
<dependency> 
<groupId>com.alibaba</groupId> 
<artifactId>dubbo</artifactId> 
<exclusions>
     <exclusion>
         <groupId>org.springframework</groupId>
         <artifactId>spring</artifactId>
     </exclusion>
     <exclusion>
         <groupId>org.jboss.netty</groupId>
         <artifactId>netty</artifactId>
     </exclusion> 
</exclusions> 
</dependency> 
<dependency> 
<groupId>org.apache.zookeeper</groupId> 
<artifactId>zookeeper</artifactId> 
</dependency> <dependency>
<groupId>com.github.sgroschupf</groupId> 
<artifactId>zkclient</artifactId> 
</dependency> 

2. 编写对应的类

     // 接口 
public interface DubboInterface {
     public String getMessage(); 
}      
     // 服务类  
public class DubboTest implements DubboInterface{     
     public String getMessage() {         
         return "Dubbo调用服务成功";     
     } 
}

3. 在Spring文件中配置服务提供方

     <bean id="dubbo" class="dubbo.test.DubboTest"/>  
<!-- 使用dubbo发布服务 --> 
<!-- 提供方应用信息,用于计算依赖关系 --> 
<dubbo:application name="blog-manager" /> 
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />  // zookeeper所在机器的ip 
<!-- 用dubbo协议在20880端口暴露服务 --> 
<dubbo:protocol name="dubbo" port="20880" />   
<dubbo:service interface="dubbo.test.DubboInterface" ref="dubbo" timeout="30000"/>      

     // 此时服务方Dubbo已经配置完成

4. 配置调用方Spring

     <!-- dubbo -->
<!-- 服务调用方 --> 
<dubbo:application name="e3-blog-web"/> 
<!-- zookeeper --> 
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
<!-- 调用对应的服务 -->      
     <!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->   
<dubbo:reference interface="dubbo.test.DubboInterface" id="dubbo" />

5. 调用方使用服务

     @Controller 
public class DubboCustorm {      
     
     @Autowired     
     private DubboInterface dubbo ;      
     
     public void custrom(){        
        System.out.println(dubbo.getMessage());      
     } 
}

6. 输出结果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

Spring Quartz任务案例源码实现

写在开始 上一篇有讲到 springTask任务案例源码实现 此篇,spring整合Quartz实现更强大的定时任务。 任务介绍 Quartz存储job方式就...

2704
来自专栏Kirito的技术分享

初识 Kong 之负载均衡

使用 Kong Community Edition(社区版 v1.3.0)来搭建一个负载均衡器,由于 Kong 是基于 Openresty 的,而 Openre...

47712
来自专栏刘君君

Zookeeper、kafka部署

2668
来自专栏假装我会写代码

从0开始在K8S上创建PHP Web应用

上图描述了我们需要创建的 Containers,其中 PauseContainer是 Kubernetes自带的所以我们不用关心,但是十分重要,未来将会有一篇文...

832
来自专栏大魏分享(微信公众号:david-share)

Openshift高阶探索实验

一、HA方式部署Openshift 一个典型的OCP高可用架构是:master至少应为三个,且为奇数个(上面有etcd); ? 基础架构节点不少于两个,上面运行...

6608
来自专栏Golang语言社区

go-nsq使用简述

一 环境依赖:   golang 开发环境(version >= 1.2) 下源码,配置环境变量,执行安装脚本   gpm 依赖包管理...

39010
来自专栏云计算

Kubernetes服务网格(第8部分):Linkerd作为入口控制器

Linkerd旨在使应用程序内部服务间的通信安全,快速和可靠。但是,这些目标同样适用于网络的接入层(应用程序对外的服务)。在这篇文章中,我们将展示Linkerd...

4218
来自专栏散尽浮华

Linux下monit进程管理操作梳理

Monit对运维人员来说可谓神器,它是一款功能非常丰富的进程、文件、目录和设备的监测工具,用于Unix平台。它可以自动修复那些已经停止运作的程序,特使适合处理那...

41810
来自专栏Laoqi's Linux运维专列

nginx keepalive_timeout 设置策略问题分析

1367
来自专栏张善友的专栏

使用log4Net 输出日志到mongodb

将日志输入到nosql 数据库可以保证日志输出速度和统一管理日志,log4mongo-net 项目http://log4mongo.org/display/PU...

1725

扫码关注云+社区