Dubbo的使用

news2024/11/24 1:51:41

Dubbo在开发中,存在两种开发思路。基于SOA(面向服务的体系架构)思想和辅助SpringCloud架构提升效率。

Dubbo 默认使用 Netty 框架

Dubbo基于SOA思想

正常SpringBoot项目是只有一个启动类,接口定义在web层(即Controller层)中,然后调用Service层。(web层和Service层都处于同一个服务中)

Dubbo基于SOA思想则是有两个启动类,web层在消费者启动类服务中,service层在提供者启动类服务中。整个框架是基于Dubbo进行开发。是一个RPC框架。

provider微服务搭建

使用dubbo协议内有一个netty服务器,所以需要一个对应的端口号。(netty是一个基于NIO的客户、服务器端的编程框架,很多中间件中都用到了netty)

consumer微服务搭建

service-api模块封装

把service接口从消费者以及提供者中提取单独封装在一个模块中,封装后消费者中只有controller,提供者中只有serviceImpl和mapper,service-api中只有service接口和domain。封装后需要在消费者和提供者的pom文件中引用service-api的模块依赖。

dubbo通信

消费者调用提供者接口,当借口返回时返回的是对象(如果返回的是字符串不进行序列化也不会出现错误,因为字符串可以直接转换为二进制进行RPC通信),对象需要序列化转换成二进制,通过RPC通信传输给消费者,消费者接收到二进制以后通过反序列化得到对象。这一过程中需要domain类实现Serializable接口才能保证接口正常,否则会报错。

Dubbo的高级特性

启动检测

为了保障服务的正常可用,Dubbo缺省会在启动时检查依赖的服务是否可用,不可用会抛出异常。Dubbo默认是开启的,我们可以进行关闭,dubbo.consumer.check=false

我们正常启动顺序是先启动提供者再启动消费者。如果先启动消费者将会报出所依赖的提供者服务不可用异常。在开发阶段,提供者不是我们开发的且不可用,而在消费者开发时又有调用,这时我们可以暂时关闭启动检测功能。

多版本支持

在提供者中定义两个serviceImpl分别是1和2,1为老版本,2为新版本,版本号分别定义在@DubboService(version="1.0.0")和@DubboService(version="2.0.0"),这样提供者即保存了新版本又有了老版本,在消费者中@DubboReference(version="2.0.0")指定新老版本进行发布。这样消费者集群和提供者集群可以选择一部分进行测试,同时也可以确保新版本不可用是老版本还在只需改动消费者就可以使用老版本了。

超时与重试

一般超时时间使用默认的超时时间即可,如果超时时间设置过短,当网络出现波动时,请求就会失败,当然dubbo的重试机制会尽量避免这个问题(失败后dubbo会通过重试机制进行两次重试),如果此时进行的是添加操作,出现网络波动,从而进行重试会导致添加三条记录。所以尽量不要吧超时时间设置过短。

另外我们可以把重试机制关掉@DubboReference(entries=0),这个所针对的是单一提供者,我们也可以直接在consumer的配置中配置dubbo.consumer.entries=0,直接把所有的提供者重试机制关闭。

负载均衡

在集群部署时,Dubbo提供了4种负载均衡策略,帮助消费者找到最优提供者进行调用。

  • Random按照权重随机:按照权重随机,默认值。按权重设置随机概率。

所有服务提供者的权重总和为10,随机策略会随机消费者的权重(0-10之间),如果0-2会分配到提供者1中,2-5会分配到提供者2中,5-10则会分配到提供者3中。

  • RoundRobin按照权重轮询策略:按照权重轮询

根据消费者的权重进行循环分配,1,2分配到提供者1中,3,4,5分配到提供者2中,6,7,8,9,10分配到提供者3中,1-10依次轮询,然后再循环。

  • LeastActive最少活跃度策略:最少活跃调用,相同活跃数的随机。

根据当前每个提供者的调用总数最少的进行调用,相同活跃数的随机调用。

  • ConsistentHash一致性Hash策略:一致性Hash,相同参数的请求总是发送到同一提供者。

参数为1的请求发送至服务提供者1中,后续再出现参数为1的请求都发送至服务提供者1中。

负载均衡配置方法:@DubboReference(loadbalance="Random") 只需把对应的英文名字设置进去就可以了。

辅助SpringCloud架构提升效率

Feign是基于Http(应用层)协议。SpringCloud默认使用Feign进行通信。

Dubbo基于TCP(传输层)协议,效率更高。可以替换Feign,提升高并发压力,Dubbo是RPC协议,而RPC协议是属于TCP协议的一种。Dubbo默认通过Netty构建TCP长连接的方式进行通信,性能较高。相当于Socket客户端。

Http协议相当于是对TCP协议的封装。效率低于TCP协议,特别是在高并发的场景下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/530619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab 梯度下降法

一、简介 梯度下降法(Gradient descent)或最速下降法(steepest descent)是求解无约束最优化问题的一种常用方法。 假设fx)在R上具有一阶连续偏导数的函数。要求解的无约束最优化问题是。其本质是一个迭代的方法,选择…

VMware Workstation 网络备忘 + 集群规模

概述 在虚拟机中部署服务,进行IP规划,进行相关的前期准备 3 张网卡 2个不同的网段 1个NAT 概述截图 NAT 截图 VMnet0 截图 VMnet1 截图 总结: 网卡(网络适配器)名称IP网段备注NATens33192.168.139.0VMnet0ens34VMne…

手把手教你在RT-THREAD bsp上运行pikascript脚本点亮小灯

简介 这篇文章介绍如何在RT-THREAD bsp上运行pikascript脚本。 pikascript相当于一个小型的micropython。 最近有一些结构上的调整,写这篇文章大概介绍一下如何使用,以及开发过程中需要注意的问题。 这篇文章几乎适配所有的RT-THREAD上的bsp。&#xff…

在Kubernetes(K8S) 上运行第一个应用

1、启动代理 : kubectl proxy 2、部署应用程序最简单的方式是使用 kubectl run 命令,该命令可以创建所有必要的组件而无需JSON或YAML文件。 --imageluksa/kubia 显示的是指定要运行的容器镜像,--port8080 选项告诉Kubernetes应用正在监听808…

每日一算-冒泡排序

冒泡排序是最简单的排序算法,如果相邻元素的顺序错误,则通过重复交换它们来工作。该算法不适用于大数据集,因为它的平均和最坏情况时间复杂度都很高。 原理 输入: arr[] {6, 3, 0, 5} 第一步: 冒泡排序从最前面的两个…

每日一算-选择排序算法

大家好,我是易安! 今天我们开始每日一算的篇章,今天带来的是选择算法。 选择排序是一种简单而高效的排序算法,它通过从列表的未排序部分中重复选择最小(或最大)元素并将其移动到列表的已排序部分来工作。该…

Kubernetes集群安全加固

本博客地址:https://security.blog.csdn.net/article/details/130678814 一、系统账户加固 1、对账户的登录次数进行检查,连续超过3次登录失败后,对用户锁定150s # 每个设备上都运行 sed -i~ 2iauth required pam_faillock.so deny3 unloc…

玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试

一、前言 “死亡测试”名字比较恐怖,这里的“死亡”指的的是程序的崩溃。通常在测试过程中,我们需要考虑各种各样的输入,有的输入可能直接导致程序崩溃,这时我们就需要检查程序是否按照预期的方式挂掉,这也就是所谓的…

CBFS Shell .NET 22.0.85 Crack

使用虚拟文件夹、自定义菜单、工具栏、详细信息列等扩展和自定义 Windows 资源管理器! CBFS Shell 窗口资源管理器自定义 使用 CBFS Shell 为您的用户扩展 Windows 资源管理器。定义用户如何与文件和文件夹交互、自定义上下文菜单、添加信息列等。与可能导致资源管…

详细解释什么是LNMP架构

LNMP(Linux-Nginx-MySQL-PHP)是一种常见的Web服务器架构,适用于中小型网站和应用。 它包括四个核心组件: 1. Linux:LNMP架构是在Linux操作系统上运行的。通常选择Ubuntu、Debian等基于Debian的发行版作为Linux系统。 2. Nginx:Nginx是一个高性能的Web服…

支付系统设计三:支付网关设计09-总结

文章目录 前言一、设计目标二、设计实现1. 开发框架2. 配置管理后台3. 屏蔽渠道差异4. 各阶段工作内容4.1 业务处理前期准备阶段4.2 业务处理阶段4.2.1 交易处理模板获取4.2.2 参数验证4.2.3 幂等性验证4.2.4 交易数据准备服务获取4.2.5 路由处理4.2.6 支付渠道数据补全4.2.7 交…

Docker高级(完结)

一、DockerFile DockerFile简介 Docker是用来构建Docker镜像文件,由一条条docker指令和参数构成的脚本。 DockerFile构建过程 小总结 从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段, Dockerfile是…

浅析垃圾回收

大家好,我是易安! Java虚拟机的自动内存管理,将原本需要由开发人员手动回收的内存,交给垃圾回收器来自动回收。不过既然是自动机制,肯定没法做到像手动回收那般精准高效 ,而且还会带来不少与垃圾回收实现相…

《MongoDB入门教程》 - MongoDB基础介绍

前言 时间也过太快了嘛,一晃上次更新都又过去6个月了,再不更新就变成年更博客了。 对了,第一次疫情也过去了,最近开始二阳了,希望大家能继续挺过去吧 本篇文章初尝试使用ChatGPT进行,博主主要负责排版和总…

mysql使用xtrabackup方式复制过滤某一个数据库

需求: 搭建一个新的从库,只复制过滤源端数据库里的其中一个数据库workflow到新实例上。 一 操作步骤 1.1 在目标端新建一个数据库实例 略 1.2 在源端做备份 /home/urman-agent/bin/xtrabackup --defaults-file/data/mysql/etc/13314/my.cnf --targ…

redis缓存穿透、缓存击穿、缓存雪崩

一、缓存 缓存是数据交换的缓冲区,是存储数据的临时地方,一般读写性能较高。 如浏览器会把静态资源先加载到浏览器缓存中,tomcat中有应用层缓存等,则数据库也有数据库缓存。 缓存的作用: 降低后端负载提高读写效率…

ES8基本命令

ElasticSearch是面向文档型数据库 构造类似于数据库:indexes(索引库数据库)-->types(类型表)-->documents(文档行)-->field(字段字段) 但是在7.X开始,Type已经开始被废弃。 正排索引:根据主键id关联内容,然后再找关键字…

微服务—Redis实用篇-黑马头条项目-达人探店功能(使用set与zset实现)

微服务—Redis实用篇-黑马头条项目-达人探店功能(使用set与zset实现) 1、达人探店 1.1、达人探店-发布探店笔记 发布探店笔记 探店笔记类似点评网站的评价,往往是图文结合。对应的表有两个: tb_blog:探店笔记表,包含笔记中的标…

Liunx基础命令 - mkdir命令

mkdir命令 – 创建目录文件 mkdir命令来自英文词组”make directories“的缩写,其功能是用来创建目录文件。使用方法简单,但需要注意若要创建的目标目录已经存在,则会提示已存在而不继续创建,不覆盖已有文件。而目录不存在&#…

路径规划算法:基于蜉蝣优化的路径规划算法- 附代码

路径规划算法:基于蜉蝣优化的路径规划算法- 附代码 文章目录 路径规划算法:基于蜉蝣优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法蜉蝣…