当前位置: 首页 > news >正文

彻底理解消息队列的作用及如何选择

一.为什么要使用消息队列?

使用消息队列,其实是需要根据实际业务场景来的,一般都是实际开发中,遇到了某种技术挑战,如果不使用MQ的话,业务实现起来比较麻烦,但是通过MQ就可以更快捷高效的实现业务功能。

消息队列使用有很多好处,比较核心的三个好处:解耦、异步、削峰

1.异步

例如,用户下一个订单,它涉及到扣库存,同时会生成订单,然后向用户发送短信服务和积分服务,如果这个流程实现成一个同步的过程,那么业务线就很长,耗时就特别长,需要15ms,但如果中间加入一个消息队列,这种情况,用户下单,然后扣库存,生成订单,只要把消息写入消息队列,这时它的业务就结束了,对于用户来说,只需要耗时6ms,比起前面的15ms,这种方式可以异步提高用户的相应时间,后面这个消息再通过异步的方式发给了短信服务和积分服务;

如果我们在进行短信发送的时候,比如短信的第三方(移动、联通、电信)宕机了,如果采用的是同步的方式,那么用户的下单就不能成功,但是如果加入了消息队列,其实是没有任何影响的,就算宕机,用户也可以正常下单,等短信服务恢复后,这个消息依然可以通过异步的方式发给用户,这就可以避免第三方服务宕机带来的不好影响

2.解耦

最开始生成订单后的消息只需要发送给短信服务和积分服务,但是后续业务扩大,我们还有要把消息发送给营销服务和进行数据分析的业务场景,如果此时没有消息队列的情况下,是需要去修改生成订单后的业务处理逻辑,这样的代码就具有耦合性,但是如果加入了消息队列,这个时候其实是解耦的,后续新增功能对这个条消息的处理,对前面的业务系统是没有任何影响的,本质上新增两个服务,我只需要新增两个消费者去定订阅相关的主题就可以了,这样这条消息依然可以发到对于的服务中,解耦后可以提高系统可用性和扩展性,哪怕后续再新增10个、100个业务场景,对原来的业务代码的侵入性也是相当小的。

3.削峰

在我们日程的业务中,业务的处理量其实是不平均的,比如每天0点到16 点,系统风平浪静,每秒并发请求数量就100个,结果每次一到16 点至23点,每秒并发请求数量突然会暴增到1万条,但是系统的后端服务的最大的业务处理能力就只能是每秒钟处理1000个请求,多余的9000个请求,是处理不了的,那么这个时候就可以使用消息队列进行流量的削峰,让系统可以平缓的处理突增的请求,因为消息队列里面有一个很重要的功能,是可以把过来的请求进行短暂的存储的,也就是说每秒钟多于的9000条请求,是可以存在消息队列中,让系统慢慢去处理这些短暂存储的请求,相当于用时间换空间,让系统平缓的处理突增的请求。

二.如何选择合适的消息队列?

这里针对比较常用的RabbitMQ、Kafka、RocketMQ三者做区分

1.RabbitMQ

RabbitMQ 有一个生产者(Producers)和一个消费者(Consumers),首先作为生产者,发送消息给一个叫做交换器的东西(Exchanges),然后交换器会把消息路由到一个它对应的队列(Queues),然后消费者直接拿到这个队列里面的消息,进行对应的消费。 

(1)基本介绍

1)RabbitMQ 于 2007 年发布,是使用 Erlang 编程语言编写的,最早是为电信行业系统之间的可靠通信设计的,也是少数几个支持 AMQP 协议的消息队列之一;

2)RabbitMQ 的轻量级、迅捷是它的宣传口号,也很明确地表明了 RabbitMQ 的特点:Messaging that just works,开箱即用的消息队列,也就是说,RabbitMQ 是一个相当轻量级的消息队列,非常容器部署和使用;

3)RabbitMQ 的客户端支持的编程语言大概是所有消息队列中最多的

(2)存在的问题

1)RabbitMQ 对消息堆积的支持并不好,当大量消息积压的时候,会导致 RabbitMQ 的性能急剧下降;

2)RabbitMQ 的性能是这几个消息队列(相对于Kafka、RocketMQ)中最差的,大概每秒钟可以处理几万到十几万条消息,如果应用对消息队列的性能要求非常高,那不要选择 RabbitMQ,比较适用于中小型公司,如果是大项目不太适应,因为他的并发量并不高

3)RabbitMQ 使用的编程语言 Erlang,扩展和二次开发成本高

2.Kafka

Kafka其实是依赖于Zookeeper的,安装Kafka是需要安装Zookeeper来做服务的注册和发现的,它有一个生产者(Producers)和一个消费者(Consumers),只是说它在处理的时候,可以可以进行分布式的部署,可以部署多台Broker,这是Kafka的一个特点。

(1)基本介绍

1)Apache Kafka 是一个分布式消息发布订阅系统,它最初由 Linkedln 公司基于独特的设计实现为一个分布式的日志提交系统,之后成为 Apache 项目的一部分;

2)在早期的版本中,为了获得极致的性能,在设计方面做了很多的牺牲,比如不保证消息的可靠性,可能会丢失消息,也不支持集群,功能上也比较简陋,这些牺牲对于处理海量日志这个特定的场景都是可以接受的,但是,随后几年 Kafka 逐步补齐了这些短板,当下的 Kafka 已经发展为一个非常成熟的消息队列产品,无论在数据可靠性、稳定性和功能特性等方面都可以满足绝大多数场景的需求

3)Kafka与周边生态系统的兼容性是最好的没有之一,尤其在大数据和流计算领域,几乎所有的相关开源软件系统都会优先支持 Kafka;

4)Kafka 性能高效、可扩展良好并且可以磁盘持久化,它的分区特性,可复制和可容错都是不错的特性,Kafka 使用 Scala 和 Java 语言开发,设计上大量使用了批量和异步的思想,使得 Kafka 能做到超高的性能,Kafka 的性能,尤其是异步收发的性能,是三者中最好的,但与 RocketMQ 并没有量级上的差异,大约每秒钟可以处理几十万甚至上百万条消息;

5)在有足够的客户端并发进行异步批量发送,并且开启压缩的情况下,Kafka 的极限处理能力可以超过每秒 2000 万条消息。

(2)存在的问题

Kafka 异步批量的设计带来的问题是,它的同步收发消息的响应时延比较高,因为当客户端发送一条消息的时候,Kafka 并不会立即发送出去,而是要等一会儿攒一批消息再发送,在它的 Broker中,很多地方都会使用这种先攒一波再一起处理的设计,当你的业务场景中,每秒钟消息数量没有那么多的时候,Kafka 的时延反而会比较高,所以,Kafka 不太适合在线业务场景,topic达到上百个时,吞吐量会大幅下降(比如,像电商场景,topic是相当的多,kafka就并不适用,所以它比较适用于日志场景,里面的topic相对来说比较少)。

3.RocketMQ

 RocketMQ 也是一个分布式的,它可以部署Master节点,也可以部署Slave节点,也可以多Matster、多Slave的,它里面还有一个NameServer,这个是可以用来取代Zookeeper来完成服务的注册和发现。

(1)基本介绍

1)RocketMQ 是阿里巴巴在 2012 年开源的消息队列产品,用Java 语言实现,在设计时参考了Kafka,并做出了自己的一些改进,后来捐赠给 Apache 软件基金会,2017 正式毕业,成为Apache 的顶级项目,RocketMQ 在阿里内部被广泛应用在订单、交易、充值、流计算、消息推送、日志流式处理、Binglog 分发等场景,经历过多次双十一考验,它的性能、稳定性和可靠性都是值得信赖的;

2)RocketMQ 有着不错的性能,稳定性和可靠性,具备一个现代的消息队列应该有的几乎全部功能和特性,并且它还在持续的成长中,阿里还有很多人在进行维护;

3)RocketMQ 有非常活跃的中文社区,大多数问题可以找到中文的答案,RocketMQ 使用 Java 语言开发,源代码相对比较容易读懂,容易对 RocketMQ 进行扩展或者二次开发;

4)RocketMQ 对在线业务的响应时延做了很多的优化,大多数情况下可以做到毫秒级的响应,如果你的应用场景很在意响应时延,那应该选择使用 RocketMQ

5)RocketMQ 的性能比 RabbitMQ 要高一个数量级,每秒钟大概能处理几十万接近上百万条消息。

(2)存在的问题

RocketMQ 的劣势是与周边生态系统的集成和兼容程度不够(因为它发展的比较晚,而且是Java开发,比如对C、C++、GO等语言的兼容性程度不够)。

相关文章:

彻底理解消息队列的作用及如何选择

一.为什么要使用消息队列? 使用消息队列,其实是需要根据实际业务场景来的,一般都是实际开发中,遇到了某种技术挑战,如果不使用MQ的话,业务实现起来比较麻烦,但是通过MQ就可以更快捷高效的实现业…...

【Java】二叉树:数据海洋中灯塔式结构探秘(上)

个人主页 🌹:喜欢做梦 二叉树中有一个树,我们可以猜到他和树有关,那我们先了解一下什么是树,在来了解一下二叉树 一🍝、树型结构 1🍨.什么是树型结构? 树是一种非线性的数据结构&…...

海洋通信船舶组网工业4G路由器应用

船舶是浩瀚海洋中探索与贸易的载体,更是船员们生活与工作的家园。为了在广阔的水域中搭建起稳定、高效的网络桥梁,工业4G路由器以卓越的通信组网能力,为船舶组网提供网络支持。 工业4G路由器以其强大的信号发射能力,确保船舶内部…...

字符串-07-判断两个IP是否属于同一子网

文章目录 1. 题目描述2. 思路3. 代码 1. 题目描述 IP地址是由4个0-255之间的整数构成的,用"."符号相连。 二进制的IP地址格式有32位,例如:10000011,01101011,00000011,00011000;每八…...

Django启用国际化支持(2)—实现界面内切换语言:activate()

文章目录 ⭐注意⭐1. 配置项目全局设置:启用国际化2. 编写视图函数3. 配置路由4. 界面演示5、扩展自动识别并切换到当前语言设置语言并保存到Session设置语言并保存到 Cookie ⭐注意⭐ 以下操作依赖于 Django 项目的国际化支持。如果你不清楚如何启用国际化功能&am…...

自定义协议

1. 问题引入 问题:TCP是面向字节流的(TCP不关心发送的数据是消息、文件还是其他任何类型的数据。它简单地将所有数据视为一个字节序列,即字节流。这意味着TCP不会对发送的数据进行任何特定的边界划分,它只是确保数据的顺序和完整…...

PHP Date 函数:日期和时间处理的全指南

PHP Date 函数:日期和时间处理的全指南 PHP Date 函数是 PHP 编程语言中用于处理日期和时间的核心函数之一。它提供了强大的功能,允许开发者轻松地格式化、计算和操作日期和时间值。本文将详细介绍 PHP Date 函数的用法,包括基本格式化、时间戳处理、时区设置以及一些高级特…...

C++设计模式:抽象工厂模式(风格切换案例)

抽象工厂模式(Abstract Factory)是一种创建型设计模式,其核心思想是:为一组相关或相互依赖的对象提供一个创建接口,而无需指定它们具体的类。简单来说,就是一个工厂可以生产一系列相关的对象。 我们接下来…...

社交媒体营销新趋势:如何通过海外平台提升品牌曝光度?

社交媒体不仅是简单的信息传播工具,更是连接用户与品牌之间的重要纽带。每天,有数以亿计的全球用户在不同平台上活跃,潜藏着巨大的市场潜力。对于企业来说,关键在于制定清晰的营销策略,精准把握不同社交平台的特性&…...

嵌入式C/C++编译常见问题与分析

#1 kcx.c:112:89: error: format specifies type unsigned int but the argument has type u32 * (aka unsigned int *) [-Werror,-Wformat] 报错原因: int kcx(u32 *trigger) { ERR_MSG("%s:failed. attr%d, trigger%u\n", __func__, attr_enable, trig…...

laravel 5.5 增加宏指令 joinSub, 省去->toSql() 和 addBinding($bindings);

laravel 5.5 增加宏指令 joinSub, 省去->toSql() 和 addBinding($bindings); 1. 在laravel5使用join 子查询时 $sub_query DB::table(table1)->select([table1.id, cate_id])->join(table2, table1.id, , table2.id)->where(table1.cate_id, 2)->orderBy(tabl…...

知识库搭建:大健康产业数字化转型的新引擎

随着数字经济的蓬勃发展,大健康产业正步入一个崭新的发展篇章。消费者对于健康的追求日益增长,促使大健康企业积极探索数字化路径,以提升供应链效率、控制成本,并在激烈的市场竞争中脱颖而出。在此过程中,一系列数字化…...

创建可重用React组件的实用指南

尽管React是全球最受欢迎和使用最广泛的前端框架之一,但许多开发者在重构代码以提高可复用性时仍然感到困难。如果你发现自己在React应用中不断重复相同的代码片段,那你来对地方了。 在本教程中,将向你介绍三个最常见的特征,表明是…...

蓝桥杯每日真题 - 第18天

题目:(出差) 题目描述(13届 C&C B组E题) 解题思路: 问题分析 问题实质是一个带权图的最短路径问题,但路径的权重包含两个部分: 从当前城市到下一个城市的路程时间。 当前城市的…...

MySQL中索引全详解

第一部分:什么是索引 索引在数据库中就像书的目录,能够快速定位数据位置,从而提升查询效率。没有索引时,数据库查询需要从头到尾扫描整个表(称为全表扫描),这在数据量大时非常耗时。有了索引后&…...

探索复合物TPP-PEG-Heparin的特性;磷酸三苯酯-聚乙二醇-肝素的线粒体靶向性

TPP-PEG-Heparin,即磷酸三苯酯(TPP)、聚乙二醇(PEG)和肝素(Heparin)的复合物,其特性融合了这三种成分的性质。 一、线粒体靶向性 TPP部分:具有线粒体靶向功能&#xf…...

ubuntu 配置 多个 git 客户端 账户

Git配置两个或多个账户 https://blog.csdn.net/mainking2003/article/details/134711865 git 提交 不用输入用户名、密码的方法(GIT免密提交) https://blog.csdn.net/wowocpp/article/details/125797263 git config 用法 https://blog.csdn.net/blueb…...

Web3与智能合约:区块链技术下的数字信任体系

随着互联网的不断发展,Web3代表着我们迈入了一个去中心化、更加安全和智能的网络时代。作为Web3的核心组成部分,区块链技术为智能合约的出现和发展提供了强有力的基础。智能合约不仅仅是自动化的代码,它们正逐步成为重塑数字世界信任体系的关…...

RocketMQ文件刷盘机制深度解析与Java模拟实现

引言 在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、…...

高级编程之结构化代码

背景:以下没结构化代码之前,定时器同步店铺信息的代码。 结构化的思想:SRP(单一职责),一个方法是做一件事,层次是相关的,逻辑和数据操作进行拆分,数据操作从业务流程上定…...

学习编程,学习中间件,学习源码的思路

01 看的多,内化不足 最近想复习一下编程相关的知识,在复习前我翻开了之前的一些笔记,这些笔记基本都是从书本、视频、博客等摘取记录的,看着这些笔记心里总结:看的多,内化不足。 02 整理大纲 为了解决这个…...

网络安全与加密

1.Base64简单说明描述:Base64可以成为密码学的基石,非常重要。特点:可以将任意的二进制数据进行Base64编码结果:所有的数据都能被编码为并只用65个字符就能表示的文本文件。65字符:A~Z a~z 0~9 / 对文件进行base64编码…...

开源协议介绍

文章目录 1. MIT License2. Apache License 2.03. GNU General Public License (GPL)4. GNU Lesser General Public License (LGPL)5. BSD License6. Mozilla Public License (MPL)7. Creative Commons Licenses (CC)8. Unlicense选择建议 在 开源平台上,开源项目通…...

Java技术复习提升 10异常

10 异常 10.1异常介绍及分类 异常捕获 选中后alttabt->选中try-catch 异常就是程序执行中不正常的情况 注意语法和逻辑错误并不是异常 异常分类有两种 error和exception error是错误 虚拟机无法解决的严重问题 exception是其他因为编程错误或者外在因素导致的一般性的问…...

java版工程项目管理系统源码:Spring Cloud与前后端分离的完美结合

在现代化的工程项目管理中,一套功能全面、操作便捷的系统至关重要。本文将介绍一个基于Spring Cloud和Spring Boot技术的Java版工程项目管理系统,结合Vue和ElementUI实现前后端分离。该系统涵盖了项目管理、合同管理、预警管理、竣工管理、质量管理等多个…...

Oracle与MySQL中CONCAT()函数的使用差异

一、CONCAT函数介绍 CONCAT函数是MySQL等数据库中用于连接两个或多个字符串的内置函数。其基本语法如下: CONCAT(string1, string2, ...)参数说明: string1, string2, …:需要连接的字符串参数,可以有多个。 返回值&#xff1…...

AI社媒引流工具:解锁智能化营销的新未来

在数字化浪潮的推动下,社交媒体成为品牌营销的主战场。然而,面对海量的用户数据和日益复杂的运营需求,传统营销方法显得力不从心。AI社媒引流王应运而生,帮助企业在多平台中精准触达目标用户,提升营销效率和效果。 1.…...

浏览器的事件循环机制

一、请简述浏览器的事件循环机制(Event Loop)基本原理 浏览器的事件循环机制是用于协调处理 JavaScript 中的异步任务与同步任务执行顺序的一种机制,它确保了代码能够按照合理的顺序执行,避免阻塞页面渲染等情况。其基本原理如下…...

如何在 React 项目中应用 TypeScript?应该注意那些点?结合实际项目示例及代码进行讲解!

在 React 项目中应用 TypeScript 是提升开发效率、增强代码可维护性和可读性的好方法。TypeScript 提供了静态类型检查、自动补全和代码提示等功能,这对于 React 开发者来说,能够帮助早期发现潜在的 bug,提高开发体验。 1. 项目初始化 在现…...

排序算法(五)--归并排序

文章目录 引言归并排序概述C语言实现代码解析结论 归并排序 C语言实例 引言 归并排序(Merge Sort)作为一种经典的排序算法,以其稳定性、分治法的巧妙应用以及相对高效的时间复杂度而著称。 归并排序概述 归并排序采用分治法(Di…...

Linux KASLR 地址偏移

kaslr开启时地址 cat /proc/cmdline BOOT_IMAGE/boot/vmlinuz-5.4.0-193-generic rootUUID0e46dee3-4557-434a-a2d2-a35c6ad3d327 ro find_preseed/preseed.cfg auto noprompt prioritycritical localeen_US quiet cat /boot/config-$(uname -r) | grep CONFIG_RANDOMIZE_B…...

利用开源图床的技巧与实践

随着互联网的普及,图片的使用变得越来越广泛。无论是个人博客、社交媒体还是企业网站,都离不开图片的呈现。而图床作为图片存储和管理的工具,可以帮助开发者和内容创作者高效地管理图片资源。本文将探讨如何利用开源图床,并提供相…...

Unity Lua方向的面试真题详解

最近有位同学面试Unity,面试的公司采用Lua的方案来做公司项目,我们把面试时问道的真题列举出来,并配上参考回复。 1、Lua热更文件时,文件是重写的,还是只写一部分? 热更分为资源更新和代码更新,资源更新…...

经验笔记:Git 基础操作指南

推荐一下Gitee最好的Git操作教程:Learn Git Branching 经验笔记:Git 基础操作指南 1. 安装 Git 首先确保您的计算机上已安装 Git。如果还没有安装,可以从 Git官网 下载并安装。 2. 配置 Git 安装完成后,打开命令行工具&#…...

大模型在智能客服中心领域的应用思考

大模型在智能客服中心领域的应用思考 作者:开源呼叫中心系统 FreeIPCC,Github地址:https://github.com/lihaiya/freeipcc 随着人工智能技术的飞速发展,特别是深度学习技术的突破,大型语言模型(LLMs&#x…...

ssm旅游推荐系统的设计与开发

摘 要 旅游推荐系统是一个综合性的在线旅游推荐平台,旨在为用户提供便捷的旅游规划和预定服务。通过该系统,用户能够浏览各类景点信息并进行分类查找,同时获取详尽的景点介绍和相关照片,以辅助做出旅行决策。系统提供在线门票订购…...

C++从零到满绩——入门基础and类和对象(上)

目录 1>>前言 2>>函数重载 3>>引用 3.1>>引用的概念 3.2>>引用三大特性 3.3>>引用的使用 3.4>>const引用 3.5>>指针与引用的关系 4>>inline内联函数 5>>nullptr 6>>类和对象(上&#…...

如何为PDF文件创建口令密码

介绍Adobe Acrobat https://helpx.adobe.com/cn/acrobat/using/access-acrobat-across-web-mobile-desktop.html 使用Adobe Acrobat软件添加口令...

【ubuntu】开机进入initramfs,无法开机

Step 1 blkid查看 ext4 的磁盘 Step 2 找到TYPE"EXT4"的盘,我们此处是 /dev/mapper/ubuntu–vg-ubuntu–lv,fsck命令是用于检查和修复Linux文件系统中的错误。通过使用-t参数指定文件系统类型(例如ext4)。我们使用如下命令进行…...

java基础---反射

仅供个人学习使用 1. 什么是反射 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为…...

CircuitBreaker机制详解:Elasticsearch中的资源管理

CircuitBreaker机制详解:Elasticsearch中的资源管理 在现代软件架构中,熔断器(CircuitBreaker)是一种重要的模式,用于防止系统过载并保护系统稳定性。在Elasticsearch中,熔断器机制尤其关键,因为它们帮助管理资源使用,防止节点因资源耗尽而崩溃。本文将深入探讨Elasti…...

毕氏完美数

毕达哥拉斯 概要 2 \sqrt{2} 2 ​ a b , a < b , a > b ab,a<b,a>b ab,a<b,a>b 判断完美数验证 自守数验证 水仙花数代码验证 概要 回顾完美数&#xff0c;自守数&#xff0c;水仙花数&#xff0c;根号2感受最美公式。 2 \sqrt{2} 2 ​ 毕达哥拉斯创立了一…...

数据结构-8.Java. 七大排序算法(中篇)

本篇博客给大家带来的是排序的知识点, 由于时间有限, 分两天来写, 中篇主要实现后三种排序算法: 冒泡排序,快速排序,下一篇讲 归并排序. 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作…...

如何能让安全责任更清晰——构建清晰安全责任体系策略与实践

安全已成为各行各业不可忽视的重要议题。然而&#xff0c;要确保组织的安全运行&#xff0c;仅仅有安全意识是不够的&#xff0c;还需要有一套清晰明确的安全责任体系来支撑。这套体系能够明确每个人的安全职责&#xff0c;促进安全管理工作的有序进行&#xff0c;降低事故发生…...

VBA技术资料MF228:移动形状并覆盖某单元格区域

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…...

《Python基础》之基本数据类型

目录 基本数据类型 1、Number(数字) &#xff08;1&#xff09;、整数&#xff08;int&#xff09; &#xff08;2&#xff09;、浮点数&#xff08;float&#xff09; &#xff08;3&#xff09;、复数&#xff08;complex&#xff09; &#xff08;4&#xff09;、 布尔…...

2024 APMCM亚太数学建模C题 - 宠物行业及相关产业的发展分析和策略(详细解题思路)

在当下&#xff0c; 日益发展的时代&#xff0c;宠物的数量应该均为稳步上升&#xff0c;在美国出现了下降的趋势&#xff0c; 中国 2019-2020 年也下降&#xff0c;这部分变化可能与疫情相关。需要对该部分进行必要的解释说明。 问题 1: 基于附件 1 中的数据及您的团队收集的…...

66 mysql 的 表自增长锁

前言 mysql 的表锁之 AUTO_INC, 是我们自增长的时候做并发控制的锁 主要是用于 自增长生成新的 id 的时候的控制 在前面的文档中, 我们又看到 mysql 这边自增长的处理的相关的大概脉络 但是 对于一些 并发控制的细节, 我们当时 应该是直接忽略掉了 我们这里就来看一下…...

java中的this关键字

&#x1f389;&#x1f389;&#x1f389;欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!!&#x1f64f;&#x1f64f;&#x1f64f; 文章目录…...

资源控制器--laravel进阶篇

laravel的控制器当中有个资源控制器,这个比较好用。 创建资源控制器 php artisan make:controller PhotoController --resource 创建个路由来使用该资源控制器 use App\Http\Controllers\PhotoController; Route::resource(photos, PhotoController::class); 隐式模型绑定不…...