Java高并发处理机制
高并发处理的思路:
- 扩容:水平扩容、垂直扩容
- 缓存:将基础的数据放入缓存进行处理
- 使用SpringCloud的注册中心,分服务注册到同一个注册中心,服务器检测使用Spring的熔断操作,检测服务器的心跳那个正常随机跳转到正常的服务器上
也可以使用熔断机制通过实现Hystrix会监测微服务间调用的状况,当失败的调用到一定阈值缺省是5秒内20次调用失败,就会启用熔断机制
熔断机制的注解是@HystrixCommand ,Hystrix会找到有这个的注解,并将这类方法关联到和熔断器连在一起的代理上,@HystrixCommand仅当类的注解为@Service和@Component时
才会发挥作用。
微服务之间的调用有两种方式,一种是一个是RestTemplate,另一个是Feign。相对应,在这两种调用方式下,都有Hystrix调用方法
- 数据量大的在数据库做集成处理
对于微服务项目开发中,多个微服务之间不仅是相对独立的,而且也是相对关联的。也就是说,微服务之间需要相互访问,多个微服务之间的接口可能会被互相调用多次,我们称之为微服务之间的通信。
- 微服务之间的通信方式有很多种, 一般都是使用RestTemplate 或者Feign
RestTemplate,是Spring中方便使用rest资源的一个对象,交互访问的资源通过URL进行识别和定位。每次调用都使用模板方法的设计模式,模板方法依赖于具体的接口调用,从而实现了资源交互和调用。它的交互方法有30多种,大多数都是基于HTTP的方法,
例如:delete(),getForEntity(),getForObject(),put(),headForHeaders()
添加对应依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
启动添加负载均衡标识
@LoadBalanced
@Bean
public RestTemplate getRestTemplate() {return new RestTemplate();
}
服务提供类,服务名称:SERVICE1,端口:7082
@RestController
@RequestMapping("/service1")
public class TestController {@RequestMapping(value = "test", method = {RequestMethod.POST,RequestMethod.GET})public String testService(@RequestParam(value = "testParam") String testParam) {System.println.out(testParam);return "success";}}
服务消费类
@RestController
@RequestMapping("/serviceFront")
public class ServiceFrontController {private final static String SERVICE1_URL = "http://SERVICE1:7082";private final static String SERVICE1 = "SERVICE1";@Autowired LoadBalancerClient loadBalancerClient;@AutowiredRestTemplate restTemplate;@RequestMapping(value = "testFront", method = RequestMethod.POST)public HashMap<String,Object> testFront(@RequestParam String testParam) {this.loadBalancerClient.choose(SERVICE1);// 随机访问策略String result = restTemplate.getForObject(SERVICE1_URL + "/service1/test?testParam={1}", String.class, testParam);HashMap<String,Object> map = new HashMap<String,Object>();map.put("result", "测试结果!"+result);return map;}
}
RestTemplate发送post请求,主要的参数有如下几种
- String url : 请求的路径
- Object request:请求体【@RequestBody 注解接收】,或者是一个HttpEntity对象(包含请求参数,请求头)
- Class< T> responseType:接收返回数据的类型
- Map<String,?> uriVariables: uri 变量, 这是放置变量的地方
- Object… uriVariables:可变长 Object 类型 参数
-
restTemplate.postForObject("http://XXXXXXXX?name={name}&age={age}", request, JSONObject.class, name,age);Feign,是声明式的伪HTTP客户端,使得编写HTTP客户端更新容易,只需要创建一个接口,并且使用注解的方式去配置,即可完成对服务提供方接口的绑定,大大简化了代码量,同时它还具有可拔插的注解特性,而且支持feign自定义的注解和springMvc的注解。
添加具体的Feign依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
在启动类Application添加feign注解,声明启动feign客户端
@EnableFeignClients
服务提供类,服务名称:SERVICE2 端口7083
@RestController
@RequestMapping("/service2")
public class TestController{@RequestMapping(value = "test2", method = {RequestMethod.POST,RequestMethod.GET})public String test2(@RequestParam(value = "testParam2") String testParam2) {System.println.out(testParam2);return "success";}}
服务消费接口类
@FeignClient(name = "SERVICE2")
public interface TestFeignClient { @RequestMapping(value="/service2/test2",method = RequestMethod.GET)public String test2(@RequestParam("testParam2") String testParam2);}
服务消费控制层
@RestController
@RefreshScope
@RequestMapping("/serviceFront2")
public class TestFeignController {@Autowiredprivate TestFeignClient testFeignClient;@RequestMapping(value = "test2", method = { RequestMethod.POST })public HashMap<String,Object> test2(@RequestParam String testParam2) { String result = testFeignClient.test2(testParam2);HashMap<String,Object> map = new HashMap<String,Object>();map.put("result", "测试结果!"+result);return map;}
}
总之,微服务之间的通讯方式可以多种并存,各有优势,在项目实践中可具体情况具体分析
相关文章:
Java高并发处理机制
高并发处理的思路: 扩容:水平扩容、垂直扩容缓存:将基础的数据放入缓存进行处理使用SpringCloud的注册中心,分服务注册到同一个注册中心,服务器检测使用Spring的熔断操作,检测服务器的心跳那个正常随机跳转…...
7 数据存储单位,整型、浮点型、字符型、布尔型数据类型,sizeof 运算符
目录 1 数据类型的分类 2 数据存储单位 2.1 位 2.2 字节 2.3 其余单位 3 整数类型 3.1 基本介绍 3.2 整型的类型 3.2.1 整数类型多样性的原因 3.2.2 整型类型之间的相对大小关系 3.3 整型注意事项 3.4 字面量后缀 3.5 格式占位符 3.6 案例:声明并输出…...
导游职业资格考试真题题库
导游职业资格考试真题题库 80.重庆有"雾都"之称。壁山区的()全年雾日多204天,堪称"世界之最"。 A.枇杷山 B.雾灵山 C.云雾山 D.四姑娘山 答案:C 81.我国最具热带海洋气候特色的地方为()。 A.广西壮族…...
【Rust】使用开源项目搭建瓦片地图服务
本文通过获取在线和离线地图数据,使用开源Rust项目搭建瓦片地图服务,并使用DevExpress的MapControl控件使用自建地图服务 获取地图数据 获取地图数据有很多种方式,这里分别用在线和离线地图数据举例说明 在线下载瓦片地图 打开在线瓦片地…...
【面试宝典】mysql常见面试题总结(上)
一、MySQL 中有哪几种锁? MySQL中的锁机制是数据库并发控制的重要组成部分,它用于管理多个用户对数据库资源的访问,确保数据的一致性和完整性。MySQL中的锁可以根据不同的分类标准进行分类,以下是一些常见的分类方式及对应的锁类…...
第1章 初识C语言
第1章 初识C语言 1.1 C语言概述 1.1.1 C语言的发展历史 C语言的原型为ALGOL 60语言(也称A语言)。 1963年 剑桥大学将ALGOL 60语言发展成为GPL语言。 1967年 剑桥大学的Matin Richards简化GPL,产生了BGPL语言。 1970年 美国贝尔实验室的Ken…...
【考研数学】定积分应用——旋转体体积的计算(一文以蔽之)
目录 一、如何计算旋转体体积?思考一个小例子 二、旋转体体积的二重积分表达式 三、用真题,小试牛刀 定积分的应用中,有一类题是求解旋转体的体积问题。 相较于记忆体积计算公式,有一种通法求解体积更不容易出错:二重…...
PHP移动端商城分销全平台全端同步使用
📱【掌中购物新纪元:探索移动端购物商城系统的无限魅力】🛍️ 🚀 随时随地,购物自由新体验 在这个快节奏的时代,移动端购物商城系统彻底颠覆了传统购物方式,让消费者享受到了前所未有的便捷与…...
TLE8386-2EL:汽车级DC-DC转换器中文资料书
描述 TLE8386-2EL是一款具有内置保护功能的低端感应升压控制器。该器件的主要功能是将输入电压升高(升压)到更大的输出电压。开关频率可从100kHz调整至700kHz,并可与外部时钟源同步。 TLE8386-2EL的独特功能可将关断电流消耗降至 <2μA。该…...
EasyRecovery17中文mac苹果电脑版数据恢复软件 永久免费破解版下载
🎉 数据丢失不再是噩梦!EasyRecovery17中文版来拯救你的硬盘啦! 各位小伙伴们,有没有遇到过重要文件一不小心就消失无踪的尴尬情况?别担心,今天就给大家种草一款神奇的工具——EasyRecovery17中文版&#x…...
Ubuntu 22.04 安装 VirtualBox7
Ubuntu默认库为VirtualBox-6版本 # 安装 VirtualBox-6 sudo apt update sudo apt install virtualbox# 卸载 VirtualBox-6 sudo apt remove --purge --auto-remove virtualbox virtualbox-6.1 1. 安装 VirtualBox-7 # 导入软件包密钥 curl https://www.virtualbox.org/downl…...
NPM使用教程:从入门到精通
NPM使用教程:从入门到精通,掌握Node.js包管理神器 引言 随着Node.js的流行,JavaScript已经成为服务器端开发的主力军。NPM(Node Package Manager)作为Node.js的官方包管理工具,为开发者提供了一个庞大的代…...
模电实验3 - 单电源集成运放交流耦合放大器
实验目标 学习集成运放的单电源使用。掌握交流耦合单电源集成运放放大器的测试方法。了解交流耦合单电源集成运放放大器的特点。 实验器材 ADALM2000 1kΩ 电阻 (1/4 W) x 1 10 kΩ 电阻 (1/4 W) x 1 100kΩ 电阻 (1/4 W) x 3 0.1μF电容 x 1 1μF电容 …...
海对外经贸大学学报
《上海对外经贸大学学报》创刊于1994年,原名为《世界贸易组织动态与研究》(上海对外贸易学院学报),随原上海对外贸易学院更名为上海对外经贸大学,自2014年起更为现名,现为综合性社科类双月刊,为中文社会科学引文检索&a…...
数字化营销在公域场景中的无限可能
在如今的商业领域,公域场景为企业提供了广阔的发展空间,而数字化营销则成为了企业在这些场景中脱颖而出的关键利器。 一、电商平台营销 当企业在淘宝、京东等大型电商平台开设店铺,数字化营销便开始大显身手。 企业不仅能踊跃参与像双十…...
聚观早报 | 一加13配置细节曝光;谷歌首推人工智能手机
聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 8月15日消息 一加13配置细节曝光 谷歌首推人工智能手机 MONA M03汽车即将上市 iPhone SE 4将升级8GB运行内存 R…...
C++ 11相关新特性(lambda表达式与function包装器)
目录 lambda表达式 引入 lambda表达式介绍 lambda表达式捕捉列表的传递形式 lambda表达式的原理 包装器 包装器的基本使用 包装器与重载函数 包装器的使用 绑定 C 11 新特性 lambda表达式 引入 在C 98中,对于sort函数来说,如果需要根据不同的比较方式实现…...
FastAPI部署大模型Llama 3.1
项目地址:[self-llm/models/Llama3_1/01-Llama3_1-8B-Instruct FastApi 部署调用.md at master datawhalechina/self-llm (github.com)](https://github.com/datawhalechina/self-llm/blob/master/models/Llama3_1/01-Llama3_1-8B-Instruct FastApi 部署调用.md) …...
C++拾趣——编译器预处理宏__COUNTER__的应用场景
大纲 生成唯一标识符调试信息宏展开模板元编程代码 在C中,__COUNTER__是一个特殊的预处理宏,它主要被用来生成唯一的整数标识符。这个宏是由一些编译器(如GCC和Visual Studio)内置支持的,而不是C标准的一部分。它的主要…...
使用HTML和cgi实现网页登录功能
0.HTML文件结构 一.HTML文件 1.test.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>菜鸟教程(runoob.com)</title></head><body><!-- 将结果提交给/cgi-bin/test.cgi下 --><form actio…...
COLMAP点云处理完,用Brush做高斯泼溅前,这5个参数调优让你的3D模型质感飙升
COLMAP点云处理完,用Brush做高斯泼溅前,这5个参数调优让你的3D模型质感飙升 当你已经能够顺利跑通从COLMAP到Brush的完整流程,却发现生成的3D模型总是差那么点意思——要么细节模糊得像打了马赛克,要么表面噪点多得像撒了胡椒面&a…...
轨道桥梁与列车这对CP,到底怎么互相伤害
车桥耦合动力学模型,轮轨耦合动力学模型,采用二自由度列车模型,可以改为FF梁SF梁,采用德国轨道谱,采用积分算法,可以输出桥梁任意位置的响应。玩轨道桥梁动力学的老铁们都知道,车桥耦合这玩意儿…...
格密码学入门:从基础定义到核心困难问题解析
1. 格密码学:当数学遇上信息安全 第一次听说"格密码学"这个词时,我正盯着电脑屏幕上一堆三维点阵图发呆。那是我在密码学实验室实习的第三天,导师随手画了两个相交的菱形,说:"这就是未来可能取代RSA的数…...
低头编程:颈椎快要崩溃!
长期低头编写代码、调试程序、查看文档,是程序员、IT 从业者等人群颈椎损伤的高发原因。当你专注于电脑屏幕上的代码时,颈椎会不自觉地向前倾斜,颈部后侧肌肉为了支撑头部重量,会持续处于紧绷痉挛状态,时间一长&#x…...
Apache Doris 4.0.4:解锁数据管理新境界
Apache Doris 4.0 作为重要里程碑发布后,社区通过 4.0.1 至 4.0.4 版本快速演进。如今 4.0.4 正式登场,功能更稳定可靠,引领其从实时分析迈向数据管理领域。面向 AI 工作负载的混合搜索能力检索成现代数据平台核心负载,Apache Dor…...
从微信聊天到在线游戏:聊聊UDP和TCP在你手机App里的那些‘小心思’
从微信聊天到在线游戏:聊聊UDP和TCP在你手机App里的那些‘小心思’ 每天我们都在用手机App聊天、打游戏、看视频,但很少有人注意到这些应用背后隐藏的网络协议选择。为什么微信文字消息总能准确送达,而语音通话偶尔会断断续续?为…...
开源工具MelonLoader:Unity游戏模组开发的3大突破与零基础上手指南
开源工具MelonLoader:Unity游戏模组开发的3大突破与零基础上手指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader …...
OpenClaw内容创作流水线:nanobot镜像从选题到发布的自动化
OpenClaw内容创作流水线:nanobot镜像从选题到发布的自动化 1. 为什么需要内容创作自动化 作为一名技术博主,我每天都要面对一个永恒难题:如何在有限时间内持续产出高质量内容。传统写作流程需要经历选题调研、大纲设计、初稿撰写、SEO优化、…...
Ostrakon-VL-8B开发资源:GitHub优秀开源项目与工具推荐
Ostrakon-VL-8B开发资源:GitHub优秀开源项目与工具推荐 如果你正在研究Ostrakon-VL-8B这个多模态大模型,想用它做点实际的东西,比如开发个智能点餐助手或者商品识别工具,那你来对地方了。自己从头开始搞,从环境搭建到…...
Realistic Vision V5.1虚拟摄影棚教程:负向提示词组合策略与失效排查
Realistic Vision V5.1虚拟摄影棚教程:负向提示词组合策略与失效排查 你是不是也遇到过这样的情况:用Realistic Vision V5.1生成的人像,明明提示词写得很好,但出来的照片总有些不对劲——手指扭曲得像外星人,脸部细节…...
