从零开始搭建springboot-dubbo的例子

Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案

一、 Dubbo的简单介绍

1. 网站架构的发展历程

网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多.......

  • 单一应用架构(OORM)

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

  • 垂直应用架构 (MVC)

当访问量逐渐增大,单一应用带来的加速度越来越小。此时,将应用拆分成互不相干的几个应用,所以采用MVC框架。

  • 分布式服务架构 (RPC)

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

  • 流动计算框架 (SQA)

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

2. dubbo核心工作原理

节点 角色说明
Provider 暴露服务的服务提供方
Registry 服务的注册与发现的注册中心,如zookeper(推荐)、multicast、redis、simple
Consumer 调用远程服务的服务消费方
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器

调用流程

  • 服务器负责启动,加载,运行服务提供者。

  • 服务提供者在启动时,向注册中心注册自己所提供的服务

  • 服务消费者在启动时,向注册中心订阅自己所需的服务

  • 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于TCP长连接推送变更数据给消费者

  • 服务消费者从提供的服务列表中,基于软负载均衡算法,选一台提供者进行调用,如果失败,则选择另一台调用

  • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到检测中心

3. dubbo特点

  1. Dubbo 支持 RPC 调用,服务之间的调用性能会很好,效率很高

  2. 支持多种序列化协议,如 Hessian(默认)、HTTP、WebService

  3. 对比springcloud

二、 springboot-Dubbo搭建

想要使用Dubbo的话,按照前面的原理图,我们主要使用它的服务远程调用功能,也就是两个项目之间相互通讯,即RPC

直接上图,先大致看看项目结构:

dubbo-provider是所谓的服务提供者,springboot项目

dubbo-consumer是服务消费者,springboot项目

dubbo-api是服务提供者的接口API,最普通的maven项目

这里可以会想起dubbo工作原理的图:

  • 0 dubbo-provider先在容器里初始化启动
  • 1 dubbo-provider去注册中心去注册服务,注册中心使用zookeeper
  • 2 dubbo-consumer去注册中心发现需要的服务
  • 3 注册中心返回dubbo-provider的服务
  • 4 dubbo-consumer直接去调用dubbo-provider

1. 项目依赖

dubbo的jar包依赖(spring-boot)

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

注册中心zookeeper的jar包依赖

<!-- 引入zookeeper的依赖 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>

2. 服务提供者

服务提供者dubbo-provider提供HelloService.sayHello()接口

package com.dubbo.provider.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.service.HelloService;
import org.springframework.stereotype.Component; //@Service是dubbo里的注解,作用是暴露服务,不要选择spring的@Service
@Service
@Component
public class HelloServiceImpl implements HelloService { @Override
public String sayHello(String name) {
return "Hello" + name;
}
}

还要在springboot的启动类上加一个开启Dubbo的注解

package com.dubbo.provider;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; //开启dubbo的自动配置
@EnableDubboConfiguration
@SpringBootApplication
public class DubboProviderApplication { public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
} }

3. 服务消费者

dubbo-consumer远程调用dubbo-consumer提供的服务HelloService.sayHello()接口

package com.dubbo.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.service.HelloService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class HelloController { @Reference//dubbo注解,可以仔细了解下这个注解
private HelloService helloService; @RequestMapping(value = "/hello")
public String hello() {
String hello = helloService.sayHello("world");
System.out.println(helloService.sayHello("BJQ"));
return hello;
} }

同上,这个也需要让Dubbo开启自动配置

package com.dubbo.consumer;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; //就是这里,对,没错 ->_->
@EnableDubboConfiguration
@SpringBootApplication
public class DubboConsumerApplication { public static void main(String[] args) {
SpringApplication.run(DubboConsumerApplication.class, args);
} }

4. 项目启动流程和结构

1. 启动祖册中心:

项目启动需要去官网下载zookeper注册中心,解压,配置一下zoo.cfg配置文件,然后启动zkServer.cmd(以下是我的简单配置)

tickTime=2000
initLimit=10
syncLimit=5
dataDir=F:\\zookeeper-3.4.14\\temp\\zookeeper
dataLogDir=F:\\zookeeper-3.4.14\\temp\\zookeeper-logs
clientPort=2181

2. 启动服务提供方dubbo-provider

如下图,说明dubbo-provider启动,并且已经连上注册中心

3. 启动服务消费方dubbo-consumer

效果跟上面差不多

4. 服务调用结果

自己去试试,皮一下,,哈哈 QWQ

三、项目地址

springboot-dubbo-demo

注意点和问题

dubbo直连,这个可以在测试的过程中使用

dubbo的高校序列化协议可以选的,默认是hessian

dubbo是基于TCP协议去做的,所以很快。

在启动zookeeper时,会有窗口一闪而过的情况,有可能时jdk环境变量有空格,还有可能是zk的dataDir路径不对

《完》

dubbo入门和springboot集成dubbo小例子的更多相关文章

  1. springboot集成mybatisplus小例子

    集成mybatisplus后,简单的CRUD就不用写了,如果没有特别的sql,就可以不用mapper的xml文件的. 目录 pom.xml文件 <?xml version="1.0&q ...

  2. 5 springboot 集成dubbo

    Apache Dubbo 是一款高性能Java RPC框架 由阿里巴巴开源并进入Apache孵化器,官网 http://dubbo.apache.org 提供服务化基础功能: 接口远程调用,智能负载均 ...

  3. 又陷入知识盲区了,面试被问SpringBoot集成dubbo,我当时就懵了

    前言 前两天在和粉丝聊天的时候,粉丝跟我说之前在面试的时候被问到SpringBoot这一块的知识被问的有点懵,和我问了不少这方面的东西.事后我想了想不如把这些东西分享出来吧,让更多的人看到,这样不管是 ...

  4. SpringBoot集成Dubbo+Zookeeper

    目录 Spring版本 dubbo_zookeeper负责定义接口 dubbo_provider 服务提供者 dubbo_consumer服务使用者 Spring版本 不知道为啥,新创建的Spring ...

  5. SpringBoot集成Dubbo

    (1).新建一个普通Maven项目,用于存放一些公共服务接口及公共的Bean等. 项目: 公共Bean: package cn.coreqi.entities; import java.io.Seri ...

  6. SpringBoot集成dubbo实例

    项目总览图: 最下面有项目的pom,具体内容: 项目运行注意事项: 先启动 provider, 将providers.xml中 port 先修改为20187 执行test目录 下的DubboProvi ...

  7. springboot 集成 dubbo(一)简介

    一.简介 1,springboot 是 一款快速开发的框架,减少了开发人员对配置文件的操作.采用一些注解来取代xml配置文件. 注解包含预先封装的注解和开发人员自定义注解.同时使用Maven.Grad ...

  8. springboot集成dubbo服务报错No provider available for the service

    检查了下发现是因为没有正确编写暴露服务的注解,需要注意下: @Service(interfaceClass = StudentService.) @Component public class Stu ...

  9. springboot 集成dubbo

随机推荐

  1. sobel算法的Soc FPGA实现之框架分析(二)

    重点分析一.AXI_VDMA_1 之前一直认为这个就是内含有DDR的ip核(......最近才搞懂是个啥),后来经过对FDMA的分析发现这就是个框架,通AXI总线挂载到bus总线,可以实现PL端FPG ...

  2. 《图解HTTP》阅读总结

    前言:<图解HTTP>是一本图文并茂的好书,讲解地很详尽.目前我只完整地读了一遍,很多地方知其然不知其所以然,接下来打算抽空再读一次.这篇博文只是做个粗略记录,第二遍读完会再来编辑细化. ...

  3. 2018-8-28-win10-uwp-MVVM入门

    title author date CreateTime categories win10 uwp MVVM入门 lindexi 2018-08-28 15:37:52 +0800 2018-2-13 ...

  4. Sql server 启用调试

    在SQL Server 2008管理平台上,调试2005的数据库,会报错. 用 SQL Server 2008管理平台,调试本机数据库,当登录服务器名为“.”的时候也会报错.   解决方法,暂时使用S ...

  5. 【python】pyenv与virtualenv安装,实现python多版本多项目管理

    踩了很多坑,记录一下这次试验,本次测试环境:Linux centos7 64位. pyenv是一个python版本管理工具,它能够进行全局的python版本切换,也可以为单个项目提供对应的python ...

  6. CAS实现SSO单点登录

    环境 cas-server-4.1.8,cas-client-3.4.0,Java-8,Maven-3,Tomcat-7.0.72 CAS Server 安装 点此进入 CAS 下载列表,选择下载 c ...

  7. HDU 4678 Mine(博弈)

    Mine Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submi ...

  8. 【技巧】Windows 10 1809无法接收1903解决方法

    这都7月份了,Windows10 1903都升级的有一个月了,然而我的1809的系统一直找不到1903的更新. 虽说1903会有bug,但还是想体验一把.周围同事都更新了,心里还是痒痒的. 于是每天都 ...

  9. docker设置proxy

    该方法是持久化的,修改后会一直生效.该方法覆盖了默认的docker.service文件. 1. 为docker服务创建一个内嵌的systemd目录 mkdir -p /etc/systemd/syst ...

  10. django之配置文件setting.py

    一:配置文件setting.py中的简单配置更改 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 简单解释 ...