Dubbo——SpringBoot集成Dubbo(@Autowired和@Reference的区别、Dubbo的服务治理)
Dubbo——原生API实现远程调用_Strine的博客-CSDN博客
在上一篇文章中我们讲了如何使用原生API发起远程调用,显然这种方式肯定是非常麻烦的,因此我们这里就讲如何使用SpringBoot去集成Dubbo将这些配置简化。
生产者服务
添加配置文件
dubbo:application:name: product-serverregistry:address: zookeeper://127.0.0.1:2181protocol:name: dubboport: 20880#允许Bean覆盖
spring:main:allow-bean-definition-overriding: true
添加启动类
添加@EnableDubbo注解用来扫描dubbo的@Service注解
@SpringBootApplication
@EnableDubbo
public class ProductServer {public static void main(String[] args) {SpringApplication.run(ProductServer.class,args);}
}
实现类
贴上@Service注解,注意:是Dubbo提供的;
消费者服务
添加配置文件
dubbo:application:name: websiteregistry:address: zookeeper://127.0.0.1:2181
spring:main:allow-bean-definition-overriding: true
控制层
@RestController
@RequestMapping("/product")
public class WebsiteController {@Reference //引用Dubbo提供的动态代理对象private IProductService productService;@Referenceprivate IMemberService memberService;@GetMapping("/pro/{productId}")public Product getProduct(@PathVariable Long productId){return productService.get(productId);}
启动类
@SpringBootApplication
@EnableDubbo
public class WebsiteServer {public static void main(String[] args) {SpringApplication.run(WebsiteServer.class,args);}
}
@Autowired和@Reference的区别
@Autowired是Spring的DI特性,是注入当前项目的Bean对象;
@Reference是引用远程项目中的Bean对象;
事务问题(分布式事务)
-
A服务开启事务对B服务发起远程调用
-
B服务掉调用也开启了一个事务,然后进行业务操作,业务正常执行,最终提交事务
-
A服务拿到远程调用的结果继续执行操作,但是后面出现异常了
-
请问A事务的回滚能影响B服务中的事务吗?
明显事务A和事务B是分别在不同机器上开启的事务,相互独立,他们是两个不同的事务,因此传统的事务管理方式是不能应用在分布式系统中的,在分布式系统中有专门的分布式事务处理方式,如:强一致性,最终一致性,例如Seata下的AT模式以及TCC模式,就可以解决分布式事务;
Dubbo Admin管控台
github源码地址:GitHub - apache/dubbo-admin at master
该项目是SpringBoot开发的需要使用maven命令打包后运行,或者直接放在idea工具中运行也可以
默认端口:7001 ,账号密码都是root
我们可以点开目标服务并对服务的提供者和消费者进行相关操作
Dubbo的服务治理
启动时检测(循环调用服务问题)
在实际开发中,经常会存在服务交叉引用的情况,如:A服务引用B服务,B服务也引用A服务,那么此时就存在问题,无论哪个服务在启动时都会报错
那么此时我们可以设置消费者项目启动时不要去检查服务是否存在,就可以顺利的启动项目了,但是在运行时服务依然不存在的话还是会报错:
#消费者不检测服务是否存在
dubbo.consumer.check=false
服务集群
只有一个服务对象时,所有压力都落在同一个对象上,逼近极限时很可能导致服务挂掉,我们可以通过多发布几个服务对象,通过负载均衡策略来缓解单一服务对象压力过大问题
-
生产者多发布几个服务对象,注意修改多个服务发布的端口
# 生产者发布端口 dubbo.protocol.port=20880 #生产者A # ------------ dubbo.protocol.port=20883 #生产者B # ------------ ...
- 消费者修改负载均衡策略,有以下选择
RandomLoadBalance:随机(random),默认策略 RoundRobinLoadBalance:轮询(roundrobin) ConsistentHashLoadBalance:hash一致(consistenthash) LeastActiveLoadBalance:最少活跃(leastactive)#appliaction.properties #修改消费者负载均衡策略 dubbo.consumer.loadbalance=roundrobin
多版本发布
服务在升级改造的过程中,由于不清楚新版本的服务是否存在BUG,往往都是采用过度的方式来进行切换,此时就要求两个版本的服务都要存在
生产者在生产服务的时候指定该服务的版本号
@Service(version="1.0")
public class UserServiceImpl implements IUserService { ... }@Service(version="2.0")
public class UserServiceImpl implements IUserService { ... }
并且消费者必须明确告知引用哪个版本的服务
@Reference(version="1.0")
private IUserService userService;@Reference(version="2.0")
private IUserService userService;@Reference(version="*") //随机引用
private IUserService userService;
服务超时、重试、容错
在服务调用的过程中,有可能服务生产者网络环境差,但是消费者并不知道,依然发出请求,长时间没有回应,此时我们可以设置消费者等待的超时时间,当调用超过设置的时间时放弃等待远程的响应,默认超时时间是:1s
当发生超时时,框架并不会马上就放弃服务的调用,还会进行重试,默认重试次数:2次
我们可以修改消费端的配置来改变默认的超时时间和重试次数
#消费者设置超时时间1.5s
dubbo.consumer.timeout=1500
#消费者设置重试次数,重试1次
dubbo.consumer.retries=1#注意:只有幂等性操作才能重试,非幂等性操作是不能重试的
此时因超时调用失败,出现的报错页面会直接的反馈给消费者,消费者再把报错信息响应出去,用户就会直接看到错误页面,这样不友好,而且用户也看不懂,应该对错误信息进行处理,给用户一个稍微正常点的数据,这个就是服务的容错
从Dubbo Admin控制台去配置当前服务的容错,当服务不能正常调用时,返回null代替异常的信息
另外,服务集群后还能配置集群下的容错机制,有以下策略可以选择:
1.FailoverCluster:失败自动切换,默认策略,用于幂等性操作,如:查询
2.FailfastCluster:快速失败,只发起一次调用,失败立即报错,用于非幂等性操作,如:插入数据
3.FailsafeCluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作
4.FailbackCluster:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作
5.ForkingCluster:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数
6.BroadcastCluster:广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息#消费者配置服务集群容错策略
dubbo.consumer.cluster=failfast
服务降级
当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。
此时我们要保证服务B能抗住压力,就只能去牺牲服务A,甚至直接把服务A功能关闭掉,把资源留给服务B使用,此时我们就可以对服务A进行降级处理
从Dubbo Admin控制台去配置当前服务的降级,消费者访问降级的服务时,不发起远程调用请求,直接返回null
相关文章:

Dubbo——SpringBoot集成Dubbo(@Autowired和@Reference的区别、Dubbo的服务治理)
Dubbo——原生API实现远程调用_Strine的博客-CSDN博客 在上一篇文章中我们讲了如何使用原生API发起远程调用,显然这种方式肯定是非常麻烦的,因此我们这里就讲如何使用SpringBoot去集成Dubbo将这些配置简化。 生产者服务 添加配置文件 dubbo:applicat…...

高并发系统的三把利器
目录 1.限流 2.缓存 2.1.缓存的使用场景 3.降级 3.1.什么是降级? 3.2.服务降级方式 4.其他高并发手段 4.1. 集群 4.2.拆分 4.2.1 应用拆分 4.2.2 数据库 4.3. 静态化 4.4.削峰 4.5.限流 5.总结 参考 保护高并发系统的三大利器:限流、熔…...
AppiumWinAppDriver自动化测试 Failed to locate opened application window with appid问题
问题产生原因:1.期望能力选项参数丢失 例如:capabilities.setCapability("appWorkingDir", "C:\\Program Files (x86)\\Tencent\\app")) 某些app需要设置目录属性才可以启动。 问题产生原因:2.访问权限不足 例如&…...

渗透测试--6.1.aircrack-ng破解wifi密码
目录 1.Aircrack-ng简介 1.1 airdump-ng 1.2 aireplay-ng 1.3 aircrack-ng 2.Deauth攻击 3.aircrack-ng工具破解无线网络密码 步骤一:虚拟机连接实验需要用到的网卡 步骤二:设置网卡为监听模式 步骤三:使用wlan0mon网卡扫描附近wif…...

C++中的继承、以及赋值兼容转换。
一、继承的概念及定义 继承可以使代码复用,允许在保持原有类特性的基础上进行扩展。 举个例子:就好比我现在要封装老师、学生等这些人的属性和方法,但是这些人都有重复的属性和方法,比如name、age、sex等等,那么我可…...
js浏览器实现简单的实时扫一扫功能
描述:利用vue-qrcode-reader插件实现h5/wap端简单的扫一扫功能 参考文档:https://gruhn.github.io/vue-qrcode-reader/demos/Validate.html官方文档 安装插件 npm i --save vue3-qr-reader 或 yarn add vue3-qr-reader 注意项目运行必须在https下&…...

unity愤怒的小鸟学习制作(二)
终于又开始了啦啦啦,我有一个自己的相机了,真开心,诶嘿 视频链接和素材如下:视频 小鸟的飞出 想要让小鸟在拉开弹弓之后能飞出去,就必须让这个组件失活,如下 所以我们更改脚本内容,加入&#…...

干外包3年,彻底寄了...
先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了6年的功能测试&…...
软考高项论文范文(三)
论信息系统项目的沟通管理 【摘要】(该摘要共313个字符) 本文讨论了ⅹⅹ省社保系统民政统一软件开发项目的沟通管理。该项目是在国家大社会保险政策指导下于2018年10月份正式启动的。该系统为用户提供了优抚安置、救灾救济等十大主要业务功能。在本文中…...
浅谈谈谈OTA召回2023
近日,国家市场监督管理总局发布特斯拉召回公告,一下子掀起了互联网热议,这次召回的范围是在2019年1月12日至2023年4月24日期间国内销售特斯拉汽车(含国产和进口共计110万辆车),在这个召回公告中有两点值得关…...

【GDI+】旋转文本/斜体字
一、需求 想要绘制如下所示的斜体字,45度 二、分析&思路 Graphics类有个 RotateTransform方法,可以传入任意角度的值来旋转画板。但是这个方法的旋转中心是画板的左上角,所以直接单单用这个方法不能满足我们的需求。此外, G…...
python3 面试题总结
Python global 语句的作用lambda 匿名函数好处Python 错误处理Python 内置错误类型简述 any() 和 all() 方法Python 中什么元素为假?提高 Python 运行效率的方法Python 单例模式为什么 Python 不提供函数重载实例方法/静态方法/类方法__new__和 __init __方法的区别…...

select poll epoll有什么区别
select/poll select 实现多路复用的方式是,将已连接的 Socket 都放到一个文件描述符集合,然后调用 select 函数将文件描述符集合拷贝到内核里,让内核来检查是否有网络事件产生,检查的方式很粗暴,就是通过遍历文件描述…...

Java基础面试题突击系列1
👩🏻 作者:一只IT攻城狮 ,关注我不迷路 ❤️《java面试核心知识》突击系列,持续更新… 💐 面试必知必会学习路线:Java技术栈面试系列SpringCloud项目实战学习路线 📝再小的收获x365天…...
go-zero和dtm分布式事务实现
go-zero是一个基于Go语言的微服务开发框架,而DTM(Distributed Transaction Manager)是一个分布式事务管理器,用于实现跨多个微服务的分布式事务。 下面是使用go-zero和DTM实现分布式事务的基本步骤: 安装和配置DTM&am…...

Springboot +Flowable,会签、或签简单使用(一)
一.简介 **会签:**在一个流程中的某一个 Task 上,这个 Task 需要多个用户审批,当多个用户全部审批通过,或者多个用户中的某几个用户审批通过,就算通过。 例如:之前的请假流程,假设这个请假流程…...
银行面试中的即兴演讲技巧,你了解吗
面试的主要形式有无领导小组讨论、结构化和半结构化面试,一些银行还会出现辩论赛、角色扮演、即兴演讲等形式,今天小编就来聊一聊面试中的即兴演讲,从如信银行考试中心了解到: 简单来说即兴演讲就是在特定情境下,自发或…...
基于LT6911UXC的LVDS视频接口调试经验
文章目录 概要整体架构流程技术名词解释技术细节小结概要 项目方案采用龙讯半导体LT6911系列 整体架构流程 CPU主芯片采用飞腾,显卡采用GP102,由于项目需要LVDS接口,GP102的HDMI口输出后经过LT6911UXC转成LVDS输出 在本方案中有两种显示屏;一个是10.4寸,一个是15.6寸。…...
【C++】OpenMP简介
一、背景知识 1、program作用 #pragma 是 C 和 C 语言中的一个预处理指令。它主要用于向编译器发送特定的信息或者指示,以便控制编译过程。#pragma 通常与编译器特定的选项或功能一起使用,因此它的具体行为和实现可能因不同的编译器而有所不同。 #pra…...

Unity HybridCLR 热更工具学习日记(一)
目录 导入HybridCLR包、安装设置相关选项 导入HybridCLR包 先找到HybridCLR包的git地址:https://github.com/focus-creative-games/hybridclr 复制包的http地址,打开unity - window - package Manager;点击左上角的 选择Add Package for…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...