Dubbo

——是SOA架构的具体的实现框架!

2.1 Dubbo简介

Apache Dubbo是一款高性能的Java RPC框架。官网地址:[http://dubbo.apache.org]

  • dubbo由阿里开发,2018年捐献给Apache基金会

  • RPC全称为remote procedure call,即远程过程调用, 它可以让我们调用本地方法一样来调用远程方法

2.2 Dubbo架构 (重点)

节点角色说明:

调用关系说明:

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

  2. 服务提供者在启动时,向注册中心注册自己提供的服务。

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

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

  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

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

面试相关:

  1. 服务消费者和注册中心是基于推模式还是拉模式获取服务的。

  2. 如果服务注册中心宕机了, 会不会影响到服务的正常调用

  3. 在dubbo的各个服务组件调用中中, 什么地方用的是长连接, 什么地方用的是短连接

2.3 Dubbo入门(重点)

2.3.1 服务注册中心

注册中心负责服务地址的注册与查找,服务提供者和消费者与注册中心交互。

Dubbo支持的服务注册中心有很多,比如zookeeper、redis等等,官方推荐使用 zookeeper 注册中心。

2.3.2 zookeeper本地安装

——课上安装在linux中,为了使用方便,也可以本地安装

1)安装

将zookeeper-3.4.6.zip复制到一个没有中文,没有空格的目录,然后解压,即安装成功!

2)配置

进入到zookeeper的配置目录conf下,复制zoo_sample.cfgzoo.cfg

3)启动

进入到zookeeper的bin目录下,双击zkServer.cmd启动服务!

2.3.3 dubbo服务提供者

——参考课上视频资料

1)坐标

<dubbo.version>2.7.4.1</dubbo.version>
<zookeeper.version>4.0.0</zookeeper.version> <!--Dubbo的起步依赖,版本2.7之后统一为org.apache.dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!--ZooKeeper客户端实现 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${zookeeper.version}</version>
</dependency>
<!--ZooKeeper客户端实现 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${zookeeper.version}</version>
</dependency>

dubbo版本2.7+,连接zookeeper客户端是curator;

dubbo版本2.6-,zookeeper客户端是zkClient。

2)配置文件

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 连接zoo,声明我的服务名,将服务进行注册 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<dubbo:application name="dubbo-service"/>
<dubbo:annotation package="com.itheima.service.impl" /> <!-- dubbo需要web容器(tomcat8080)进行启动;dubbo对外公布dubbo服务,占用服务端口 -->
<dubbo:protocol port="20880"/>
</beans>

dubbo版本不同,会导致引入的xml约束文件也不相同!

2.7+版本:

xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"

http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd

2.6-版本:

xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd

需要提供一个web.xml,加载该配置文件——利用spring初始化!

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

3)业务代码+注解

接口

public interface UserService {
public String sayHello();
}

实现类

@org.apache.dubbo.config.annotation.Service
public class UserServiceImpl implements UserService { public String sayHello() {
return "hello dubbo hello!~";
}
}

4)启动服务

tomcat7插件

2.3.4 dubbo服务消费者

——参考课上视频资料

1)依赖

<!--Dubbo的起步依赖,版本2.7之后统一为rg.apache.dubb -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!--ZooKeeper客户端实现 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${zookeeper.version}</version>
</dependency>
<!--ZooKeeper客户端实现 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${zookeeper.version}</version>
</dependency>

2)配置文件

----连接zoo,要服务接口

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<dubbo:application name="dubbo-web" >
<dubbo:parameter key="qos.port" value="33333"/>
</dubbo:application>
<!-- 包扫描:加载bean;识别@Reference注解,远程注入!-->
<dubbo:annotation package="com.itheima.controller" />
</beans>

3)调用业务代码

@RestController
@RequestMapping("/user")
public class UserController {
@Reference//远程注入
private UserService userService; @RequestMapping("/sayHello")
public String sayHello(){
return userService.sayHello();
}
}

4)启动调用

tomcat7:run

2.3.5 统一接口优化

——参考课上视频资料

——基于maven依赖某模块完成,利用依赖传递

2.4 dubbo-admin

——只作为监控服务来看待,不影响dubbo的正常服务调用!

1)安装

将提供的dubbo-admin.war放置到tomcat的webapps目录下,启动tomcat即可!如果zookeeper位置不是本地,则需要修改配置文件:

2)使用

三、Dubbo高级

——以下部分用于面试

序列化

dubbo见传递对象,该对象需要实现序列化接口

服务超时

多版本(重点)

负载均衡

容错

服务降级

启动检查

启动时检查,配置在服务消费者一方,用于服务消费者在启动的时候主动检查注册中心或者服务提供者是否准备好提供服务

如果配置为false,代表不检查

如果配置为true,代表检查,一旦检查到服务提供者未准备好,就会直接抛异常

建议在开发阶段设置为false,在生产环境下改为true(默认)

dubbo: consumer: check: false registry: check: false

Dubbo是什么?核心总结的更多相关文章

  1. Dubbo原理和源码解析之服务引用

    一.框架设计 在官方<Dubbo 开发指南>框架设计部分,给出了引用服务时序图: 另外,在官方<Dubbo 用户指南>集群容错部分,给出了服务引用的各功能组件关系图: 本文将根 ...

  2. Dubbo常用配置解析

    一.多版本的支持 如何发布服务,需要将需要暴露的服务接口发布出去供客户端调用,需要在java同级目录新建一个resources目录,然后将resoureces目录标记成Test Resoureces ...

  3. Dubbo 源码分析 - 自适应拓展原理

    1.原理 我在上一篇文章中分析了 Dubbo 的 SPI 机制,Dubbo SPI 是 Dubbo 框架的核心.Dubbo 中的很多拓展都是通过 SPI 机制进行加载的,比如 Protocol.Clu ...

  4. 【Dubbo 源码解析】02_Dubbo SPI

    Dubbo SPI:(version:2.6.*) Dubbo 微内核 + 插件 模式,得益于 Dubbo SPI .其中 ExtentionLoader是 Dubbo SPI 最核心的类,它负责扩展 ...

  5. dubbo的一些默认变量

    dubbo默认变量表 变量名 描述 默认值 用途 DEFAULT_IO_THREADS 默认IO线程 Math.min(Runtime.getRuntime().availableProcessors ...

  6. 【Dubbo源码阅读系列】之 Dubbo SPI 机制

    最近抽空开始了 Dubbo 源码的阅读之旅,希望可以通过写文章的方式记录和分享自己对 Dubbo 的理解.如果在本文出现一些纰漏或者错误之处,也希望大家不吝指出. Dubbo SPI 介绍 Java ...

  7. 干货|Dubbo社区开发者日经验分享

    Hello,各位小伙伴大家好,我是小栈君,昨天也就是2019年10月26日,有幸在成都参加了由阿里举办的"Dubbo社区开发者日". 本次活动汇聚了各方面的大神欢聚一堂,主要是对现 ...

  8. Dubbo:1

    Dubbo能解决什么问题 怎么去维护url:通过注册中心去维护url(zookeeper.redis.memcache…). F5硬件负载均衡器的单点压力比较大:软负载均衡. 怎么去整理出服务之间的依 ...

  9. dubbo分布式服务框架-study1

    本文参考“如何给老婆解释RPC”一文进行的... 1.首先了解下dubbo: dubbo是一款高性能.轻量级的开源java RPC服务框架(RPC即远程过程调用,具体解释见:https://www.j ...

随机推荐

  1. POJ 1927 Area in Triangle 题解

    link Description 给出三角形三边长,给出绳长,问绳在三角形内能围成的最大面积.保证绳长 \(\le\) 三角形周长. Solution 首先我们得知道,三角形的内切圆半径就是三角形面积 ...

  2. Lesson4——Pandas DataFrame结构

    pandas目录 思维导图 1 简介 DataFrame 是 Pandas 的重要数据结构之一,也是在使用 Pandas 进行数据分析过程中最常用的结构之一. 2 认识DataFrame结构 Data ...

  3. MySQL 事务的隔离级别及锁操作的一点点演示

    MySQL 版本:5.7 安装环境:MAC OS 一.测试数据 测试数据库:test:测试表:tt CREATE TABLE `tt` ( `id` int(11) DEFAULT NULL, `na ...

  4. 后缀自动机 (SAM)

    后缀自动机 定义 定义 SAM 为一个有限状态自动机,接受且仅接受 \(S\) 的一个后缀. 同时,SAM 是这样的自动机中最小的那个,其中状态数至多为 \(2n - 1\),转移数至多为 \(3n ...

  5. 如何完整删除DISK DRILL

    前两天装了DISK DRILL 右上角出现一个温度提示的图标  现在把DISK DRILL卸载了  但右上角的温度提示图标仍然存在  请问如何删除? 打开系统偏好设置----用户与群----管理员(点 ...

  6. 对JSP中的Session 简单理解

    我的理解: 简单来说,要使用服务器端的session对象,就是要有其对应的key,即sessionid,它只认识sessionid. 下面我说的cookie,url重写或者隐藏表单,都是为了将其对应的 ...

  7. 编译PHP扩展的方式

    编译的两种方式其实很简单,这里记录只是为了以后遇到这种情况时不加思索地运用上,而不是花费一些时间去回忆. C/C++程序编译有两种方式:动态编译.静态编译.PHP 是使用 C/C++程序开发的一门脚本 ...

  8. V8 内存管理和垃圾回收机制总结

    这篇文章主要介绍 V8 的内存管理和垃圾回收知识. V8 内存管理及垃圾回收机制浅析 由于 V8 引擎的原因,Node 在操作大内存对象时受到了一些限制,在 64 位的机器上,默认最大操作的对象大小约 ...

  9. Windows安装RabbitMQ过程及相关问题

    一.下载 1.首先需要下载erlang,下载地址:http://www.erlang.org/downloads 2.其次需要下载RabbitMQ,下载地址:https://www.rabbitmq. ...

  10. laravel中closure和curry 科里化函数式编程

    推荐值得的一看博客文档:谢谢作者  : https://my.oschina.net/zhmsong 函数式编程curry的概念: 只传递给函数一部分参数来调用函数,然后返回一个函数去处理剩下的参数. ...