SpringBoot_Dubbo

SpringBoot & 分布式

在分布式系统中,国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,Spring Boot+Spring Cloud。

分布式系统:

分布式系统.jpg
  • 单一应用架构

    当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

  • 垂直应用架构

    当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

  • 分布式服务架构

    当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

  • 流动计算架构

    当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

    Zookeeper & Dubbo

ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。

Dubbo 结构图 :

Dubbo结构图.png

其实主要就是一个provider和consumer的模型

实现步骤:

  1. 安装Zookeeper作为注册中心

  2. 编写服务提供者

  3. 编写服务消费者

  4. 整合dubbo

    <dependency>
     <groupId>com.alibaba.spring.boot</groupId>
     <artifactId>dubbo-spring-boot-starter</artifactId>
     <version>2.0.0</version>
    </dependency>
    

代码如下:

  1. 首先先在虚拟机上用docker拉下zookeeper的镜像,启动zookeeper

  2. 创建两个项目,分别为consumer—user & provider—ticket

  3. 在两个项目下的pom文件中加入相同的dubbo-spring-boot-starter & zkclient

    <dependency>
             <groupId>com.github.sgroschupf</groupId>
             <artifactId>zkclient</artifactId>
             <version>{xxx}</version>
    </dependency>
    <dependency>
             <groupId>com.alibaba.boot</groupId>
             <artifactId>dubbo-spring-boot-starter</artifactId>
             <version>{xxx}</version>
    </dependency>
    

    ​ 在github官方文档中找到对应的配置版本,以防后期一直报错

  4. 先写提供者provider—user这个项目下的代码

    ​ 先是配置文件

    dubbo.application.name=provider-ticket
    
    dubbo.registry.address=zookeeper://192.168.48.174:2181
    
    dubbo.scan.base-packages=com.liyanyan.ticket.service
    

    ​ 然后是Service层

    package com.liyanyan.ticket.service;
    //接口
    public interface TicketService {
    
        public String getTicket();
    }
    
    
    //实现类
    @Component  //将服务放在容器中
    @Service     //将服务发布出去  这里import的是dubbo中的service注解
    public class TicketServiceImpl implements TicketService {
        @Override
        public String getTicket() {
            return "<厉害了,我的锅>";
        }
    }
    
    
    //启动类
    /**
     *   1、将服务提供者注册到注册中心
     *       1、引入dubbo和zkclient相关依赖
     *       2、配置dubbo的扫描包和注册中心地址
     *       3、使用@Service发布服务
     */
    @SpringBootApplication
    public class ProviderTicketApplication {
     public static void main(String[] args) {
         SpringApplication.run(ProviderTicketApplication.class, args);
     }
    }
    
    

    ​ 将服务发布在容器中,等待被调用

  5. 再写消费者consumer—user项目下的代码:

    ​ 先是需要对项目进行配置,配置文件如下:

    dubbo.application.name=consumer-user
    
    dubbo.registry.address=zookeeper://192.168.48.174:2181
    

    ​ 然后需要再与provider—user下的 TicketService 接口路径一样

    package com.liyanyan.ticket.service;
    
    public interface TicketService {
        public String getTicket();
    }
    
    
    //UserService类用来实现service方法,注解ticket项目下实现类同样
    @Component
    @Service
    public class UserService {
    
        @Reference
        TicketService ticketService;
    
        public void hello() {
            String ticket = ticketService.getTicket();
            System.out.println("买到票了:"+ticket);
        }
    }
    
    
    //测试类
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class ConsumerUserApplicationTests {
    
     @Autowired
     UserService userService;
    
     @Test
     public void contextLoads() {
         userService.hello();
     }
    }
    
    

    因此当测试时,方法调用先是消费者的方法userService.hello()-->ticketService.getTicket()-->通过容器调用提供者的getTicket() 方法,返回值-->得到结果
    学习 尚硅谷的springboot视频任务时 的学习笔记

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容