自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

秃了也弱了

私人博客,有需要请联系17854238061(vx同号)

  • 博客(617)
  • 收藏
  • 关注

原创 SpringAOP从入门到源码分析大全(四)SpringAOP的源码分析

/ 把所有的Bean拿出来遍历,判断某个bean的类型是否是Aspectif (!continue;Class

2024-04-18 21:39:37 880

原创 SpringAOP从入门到源码分析大全(三)ProxyFactory源码分析

在构造JdkDynamicAopProxy对象时,会先拿到被代理对象自己所实现的接口,并且额外的增加SpringProxy、Advised、DecoratingProxy三个接口,组合成一个Class[],并赋值给proxiedInterfaces属性并且检查这些接口中是否定义了equals()、hashcode()方法。

2024-04-18 21:39:04 857

原创 Spring配置类解析与Bean扫描过程源码分析

6、如果配置类上存在@ComponentScan注解,那么则解析该注解,进行扫描,扫描得到一系列的BeanDefinition对象,然后判断这些BeanDefinition是不是也是配置类BeanDefinition(只要存在@Component注解就是配置类,所以基本上扫描出来的都是配置类),如果是则继续解析该配置类,(也有递归),并且会生成对应的ConfigurationClass。4、如果配置类上存在@Component注解,那么解析配置类中的内部类(这里有递归,如果内部类也是配置类的话)

2024-04-15 20:58:55 708

原创 Spring中类解析神器:MetadataReader,熟悉ClassMetadata、AnnotationMetadata

*** 自定义过滤器,只扫描标注@MyAnnotation的类} });// 获取扫描结果,并并且会自动封装到BeanDefinition Set < BeanDefinition > candidateComponents = provider . findCandidateComponents("com.test");

2024-04-15 20:58:03 908 1

原创 Spingboot落地国际化需求,Springboot按照请求的地区返回信息

国际化(internationalization)是设计和制造领域适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版本的生产。开发这样的程序的过程,就称为国际化。/*** 国际化相关* @return*/@Beantest=中国Success={0}成message功Test=我的test内容/*** 国际化相关} }/**

2024-04-09 21:23:48 685 1

原创 Springboot动态切换数据源实现多租户架构

一个支持多租户技术的系统需要在设计上对它的数据和配置进行虚拟分区,从而使系统的每个租户或称组织都能够使用一个单独的系统实例,并且每个租户都可以根据自己的需求对租用的系统实例进行个性化配置。使用数据库级别的数据隔离是实现多租户架构的一种常见方式。数据隔离是指在多租户架构中,保持各个租户之间的数据相互独立,确保一个租户的数据不会被其他租户访问或篡改。进一步我们可以总结出,可以通过当前登录的用户session,来获取到该用户的租户信息,并通过租户信息来获取到该租户所持有的数据源,来实现多租户的数据隔离。

2024-04-09 21:23:16 573

原创 安全架构设计:网络通信、身份、软件安全

OpenID:一种开放的身份验证标准。OAuth2.0:OAuth升级版。把一个网站的资源授权给另一个网站的过程。OpenID Connect(OIDC):OAuth2的一体两面。OAuth2.0授权4大模式:授权码模式:完整、严密,第三方认证和授权的最主流实现。简化模式:令牌用户可见,移动端的常用实现手段。密码模式:用户名密码暴露给用户。客户端模式:后台应用之间进行沟通,用户就是客户端。

2024-04-02 08:34:57 919

原创 亿级IM聊天系统架构设计与重难点分析

IM系统就是即时通讯(Instant Messaging)系统的简称。IM其实并不局限于聊天、社交这类“典型”应用中,实际上它已经广泛运用于我们身边形形色色的软件中。聊天、直播、在线客服、物联网等所有需要实时互动、高实时性的场景等,都需要应用IM技术。1)微信、qq、钉钉等主流IM应用:这是IM技术的典型应用场景;2)微博、知乎等社区应用:它们利用IM技术实现了用户私信等点对点聊天;3)抖音、快手等直播/短视频应用:它们利用IM技术实现了与主播的实时互动;

2024-04-02 08:34:12 679

原创 使用FlinkCDC从mysql同步数据到ES,并实现数据检索

随着公司的业务量越来越大,查询需求越来越复杂,mysql已经不支持变化多样的复杂查询了。于是,使用cdc捕获MySQL的数据变化,同步到ES中,进行数据的检索。

2024-03-22 08:45:46 1271

原创 使用SpringAOP+Caffeine+Redis实现本地缓存与多级缓存

*** 本地缓存// 过期时间 默认10分钟 long expired() default 600;// key创建器 String keyGenerator() default "org.springframework.cache.interceptor.KeyGenerator";/*** 本地缓存// 过期时间 默认10分钟 long expired() default 600;

2024-03-22 08:44:24 522

原创 OpenResty使用Lua大全(十二)实战: 动手实现一个网关框架

统一入口;安全:黑名单、权限身份认证;限流:实现微服务访问流量计算,基于流量计算分析进行限流,可以定义多种限流规则;缓存:数据缓存;日志:记录日志;监控:记录请求响应数据,api耗时分析,性能监控;重试:异常重试;熔断:降级。安装依赖1)OpenResty: 版本应在1.9.7.3+需要编译OpenResty时添加2)lor框架3)MySQL数据库名:orange安装mysql数据库执行相应的版本的数据库脚本。

2024-03-20 08:37:41 1076

原创 OpenResty使用Lua大全(十一)实战: nginx实现接口签名安全认证

我们会发现,如果我获取了你完整的链接,一直使用你的key和sign和一样的参数不就可以正常获取数据了!是的,仅仅是如上的优化是不够的。如上,优化后的请求多了key和sign参数,这样请求的时候就需要合法的key和正确签名sign才可以获取产品数据。通过上面的案例,我们可以看出,安全的关键在于参与签名的secret,整个过程中secret是不参与通信的,上述的Sign签名的方式能够在一定程度上防止信息被篡改和伪造,保障通信的安全,这里使用的是MD5进行加密,这样就算被人拿走完整的请求链接也是无效的。

2024-03-20 08:36:58 950

原创 OpenResty使用Lua大全(十)实战: Lua + Redis 实现动态封禁 IP

为了方便管理和共享,我们通过 Nginx+Lua+Redis 的架构实现 IP 黑名单的功能。为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单。在http部分,配置本地缓存,来缓存redis中的数据,避免每次都请求redis。1、在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求;3、在应用层面,在请求服务之前检查一遍客户端 IP 是否在黑名单。对于黑名单之内的 IP ,拒绝提供服务。

2024-03-19 08:24:17 455

原创 OpenResty使用Lua大全(九)实战:nginx-lua-redis实现访问频率控制

set_by_lua,rewrite_by_lua,access_by_lua,content_by_lua等方法。我们用redis的key表示用户,value表示用户的请求频次,再利用过期时间实现单位时间;在高并发场景下为了防止某个访问ip访问的频率过高,有时候会需要控制用户的访问频次。现在我们要求10秒内只能访问10次frequency请求,超过返回403。这个配置,放在server部分,让所有的location 适用就行了。当然这只是简单的限流小实验,使用开源网关可以实现更复杂的限流。

2024-03-19 08:23:38 801

原创 OpenResty使用Lua大全(八)OpenResty执行流程与阶段详解

之前也介绍过。语境:http阶段:loading-config当nginx master进程在加载nginx配置文件时运行指定的lua脚本,语境:http阶段:starting-worker在每个nginx worker进程启动时调用指定的lua代码。用于启动一些定时任务,比如心跳检查,定时拉取服务器配置等等;此处的任务是跟Worker进程数量有关系的,比如有2个Worker进程那么就会启动两个完全一样的定时任务。

2024-03-18 08:43:38 1451

原创 OpenResty使用Lua大全(七)OpenResty使用全局缓存

Nginx是一个Master进程多个Worker进程的工作方式,因此我们可能需要在多个Worker进程中共享数据。使用来实现全局内存共享。

2024-03-18 08:43:03 978

原创 OpenResty使用Lua大全(六)OpenResty发送http请求

ngx.location.capture 方法就是发起http的请求,但是它只能请求 内部服务,不能直接请求外部服务。编辑nginx.conf配置文件,配置一下路由,定义有个两个服务请求 商品服务请求和订单服务请求。可很多时候我们会要求商品请求 是不对外暴露的,也就是用户无法直接访问商品服务请求。刚才我们请求外部请求,是写死了q=iphone,那我们用capture传参。不能直接发起外部请求,我们需要通过内部请求中用反向代理请求发起外部请求。—>这种数据截断的原因只可能是因为子请求发生了不可恢复的错误,

2024-03-15 08:40:53 1203

原创 OpenResty使用Lua大全(五)OpenResty中使用MySQL

客户端目前还没有提供预编译SQL支持(即占位符替换位置变量),我们编写个案例,操作mysql数据库,编辑test.lua。默认安装OpenResty时已经自带了mysql模块。连接池和之前Redis客户端完全一样。进行字符串转义,防止sql注入;这样在入参时记得使用。

2024-03-15 08:40:21 746

原创 OpenResty使用Lua大全(四)OpenResty中使用Redis

redis的连接是tcp连接,建立TCP连接需要三次握手,而释放TCP连接需要四次握手,而这些往返时延仅需要一次,但A,B业务共用了连接池,很有可能 B业务拿到的 A业务使用的连接,而此连接操作的数据库db1;如果当前连接不是从内建连接池中获取的,该方法总是返回 0 ,也就是说,该连接还没有被使用过。注意:我们如何知道,redis连接对象是从连接池中获取的,还是新创建的连接呢?以后应该复用TCP连接,此时就可以考虑使用连接池,即连接池可以复用连接。1、连接池是每Worker进程的,而不是每Server的;

2024-03-14 08:26:53 1082

原创 OpenResty使用Lua大全(三)OpenResty使用Json模块解析json

引入cjson.safe 模块接口,该接口兼容 cjson 模块,并且在解析错误时不抛出异常,而是返回 nil。这个是因为对于 Lua 本身,是把数组和哈希键值对融合到一起了,所以他是无法区分空数组和空字典的。web开发过程中,经常用的数据结构为json,openresty中封装了json模块。pcall 接收一个函数和要传递给后者的参数,并执行,执行结果:有错误、无错误;2)table所有键为数组型键值对时,会当作数组看待,空位将转化为null。执行效果,没有系统错误,返回了nil。

2024-03-14 08:26:12 980

原创 OpenResty使用Lua大全(二)在OpenResty中使用Lua

ngx.var.arg_strider的值为”1”,而ngx.req.get_uri_args[“strider”]的值为table [“1”, “2”, “3”, “4”]。重写阶段、访问限制阶段、内容处理阶段,这几个阶段都是独立的,就像Servlet也有不同的生命周期,不同的阶段处理不同的相关的业务。ngx.var.arg_xx与ngx.req.get_uri_args[“xx”]两者都是为了获取请求uri中的参数。对于应用开发,一般使用 ngx.INFO 到 ngx.CRIT 就够了。

2024-03-13 08:21:42 1075

原创 OpenResty使用Lua大全(一)Lua语法入门实战

一)lua介绍1993 年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro in Brazil)诞生了一门编程语言,发明者是该校的三位研究人员,他们给这门语言取了个浪漫的名字——Lua,在葡萄牙语里代表美丽的月亮。事实证明她没有糟蹋这个优美的单词,Lua 语言正如它名字所预示的那样成长为一门简洁、优雅且富有乐趣的语言。

2024-03-13 08:20:53 981

原创 使用AOP+SPEL实现业务日志收集

*** 日志注解User , // 用户 Role , // 角色 Order , // 订单 Product , // 产品 } /*** 操作的动作,如增、删、改等/*** 操作的业务类型,如用户、角色、订单等/*** 操作的用户的ID(Spel)/*** 操作的资源的ID(如订单id)/*** 操作之前的原数据(SpEL)/*** 操作之后的新数据(SpEL)/*** 日志注解。

2024-03-07 13:53:42 467 1

原创 Atomikos详解:数据库XA规范与Atomikos使用与源码分析

*** 定义两个数据源,分别对应两个数据库} /*** 定义两个数据源,分别对应两个数据库} }/*** 定义两个数据源,分别对应两个数据库} /*** 定义两个数据源,分别对应两个数据库} }/*** 定义两个数据源,分别对应两个数据库} /*** 定义两个数据源,分别对应两个数据库} }

2024-03-07 13:53:03 1279

原创 ClickHouse安装、简介及使用

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。OLAP(On-line Analytical Processing):联机分析处理。OLAP场景要求在大型数据集上对具有以下特征的复杂分析查询数据集可能是海量的——数十亿或数万亿行数据组织在包含许多列的表中只选择几列来回答任何特定的查询结果必须以毫秒或秒为单位返回读多于写。将数据批量/实时写入后,后续可以进行任意维度的灵活搜索、洞察等。大宽表。一张存在N多列的表,平时使用时可能只用到其中的部分字段。

2024-03-04 16:15:30 1163

原创 Flink时间语义&WindowAPI&Watermark详解:时间与乱序对实时处理的影响

event time:事件/数据真正产生的时间,这个时间一旦产生了,肯定就不变了。(进Flink之前就已经存在了)process time:事件/数据处理的世界,这个时间是不确定的,跟处理服务器的时间相关。(比如说每小时处理一次,这一小时内的数据都会在整点处理)(优点:性能好,低延迟;缺点:结果是不确定的)(比如说,10::59:20产生的数据,正常是在10-11点的窗口内,但是由于网络抖动、服务器等原因在11点之后执行)所以,如果不关注准确度的话,就可以使用process time处理,因为性

2024-03-04 16:14:51 1037

原创 Springboot中ApplicationContextInitializer的使用及源码分析

ApplicationContextInitializer接口的执行时机:用于在刷新之前初始化Spring ConfigurableApplicationContext的回调接口。通常在需要对应用程序上下文进行一些中使用。例如,。ApplicationContextInitializer接口只有一个方法,实现该方法会获得一个ConfigurableApplicationContext的回调。3、ApplicationContextInitializer的常用用法(1)注册BeanFactoryPostP

2024-02-28 15:43:46 1216

原创 Springboot外部化配置详解与源码分析

如果有两者的配置文件.properties和YAML格式放在同一个位置,.properties优先考虑。Springboot配置属性加载顺序从上到下依次加载,后加载的同名配置会覆盖之前的。).如果您仍然希望使用构造函数注入其他bean,则配置属性bean必须用。默认情况下,当指定的配置数据位置不存在时,Spring Boot将引发。如果希望指定一个位置,但允许它不存在,可以使用。多文档属性文件通常与激活属性结合使用,例如。对应第十条,当应用程序启动时,任何。中,它是一个抽象类,有许多实现。

2024-02-28 15:43:10 738

原创 Springboot应用执行器Actuator源码分析

通过各种方式定义的Endpoint,创建为WebMvcEndpointHandlerMapping,进行Web映射。Actuator是Springboot提供运行时数据交互的规范。它覆盖应用内心戏、环境配置、度量指标、敏感操作。交互方式为Http Web或者JMX。注册Endpoint为Mvc映射。

2024-02-26 22:19:55 1035

原创 架构设计实践:熟悉架构设计方法论,并动手绘制架构设计图

需求是贯穿整个研发、架构设计生命周期的。以下是架构的V型图,从左往右是从业务需求到架构设计,最底下是产品开发到逐层的功能验证。当一个需求完成以后,我们会有新的需求进行迭代,然后不断地循环这个过程。1、明确公司业务战略,明确业务需求和非业务需求。2、了解行业标准、限制和质量要求。3、搞明白公司目前IT状态和架构状况。(已有的架构图、设计文档、资产)3、产出系统上下文。4、产出用例模型。5、找出公司/业内的所有资产(将狗资产、方法论的资产),输入到整个架构设计的环节中。

2024-02-26 22:19:18 1315 1

原创 IaaS、PaaS、SaaS架构设计分析,彻底吃透云平台

特定行业的应用,而且这种行业具有一定的普遍性,通过一定的业务娃爱宝,通过一定的行业标准,可以简化一个企业从无到有,从小到大,从弱到强的发展周期。每个企业只要专注于自己的核心业务,对非核心业务比如客户管理、大数据分析、办公管理系统等等,都外包给SaaS平台。还有一些通用的前端业务、人工智能、大数据等核心难点功能,也都可以使用SaaS平台。如果说IaaS是云平台的过去式,PaaS就是云平台的现在式,SaaS才是云平台的未来式。

2024-02-21 17:31:29 964

原创 从浅入深认识云,云平台架构的设计:上云,你准备好了吗?

云是一种比喻说法,就像我们平时看到的云一样,高出不胜寒,站在云端往下看,一切都很渺小。同样的,在云上部署你的应用,可以享受云端很多企业的经验总结,很多坑已经早就被排除掉了。这些企业、软件、系统,会集结成一套标准的套路来使用,所以,就像站在巨人的肩膀上,站在最高点来观察从开发到发布到运维的全过程。云,同样有敏捷的感觉,从发布到弹性伸缩,又高又快。云,主要指基于云计算和云服务的应用。云服务通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源,如IT和软件、互联网相关服务,甚至其他服务。

2024-02-21 17:30:41 1151

原创 Flink从入门到实践(三):数据实时采集 - Flink MySQL CDC

注意MySQL的版本,本次是使用MySQL8.0进行演示。同时,Flink支持很多数据库的cdc。同时也要对应好版本,我们本次使用Flink是1.18,同时FlinkCDC也是3.0版本System . out . println("数据库:" + split [ 1 ]);System . out . println("表:" + split [ 2 ]);

2024-02-08 10:23:23 2642

原创 Flink从入门到实践(二):Flink DataStream API

/ num>@Override@Override// 最终执行的方法,输出到终端});

2024-02-08 10:22:48 1761

原创 Flink从入门到实践(一):Flink入门、Flink部署

离线:结果是一次性出来的。实时:来一个数据处理一次,数据是带状态的。

2024-02-08 10:21:01 2199

原创 做好技术选型:用合适的技术做合适的事(干货满满)

根据实际业务管理的需要,对硬件、软件以及所要用到的技术进行规格的选择。狭义上的技术选型:团队决定选用哪种技术去解决业务问题。(某种语言、某种框架去开发项目)广义上的技术选型:泛指项目实施过程中的各种技术决策。(制定技术AB方案选其中一套,每个技术决策都是技术选型)在决定采纳某个技术之前,一定要做好调研,并尝试小规模引入,积累经验,经过验证后再大规模采用。总结一下技术选型的简单过程;解决了那些问题;是否达到了预期;哪些地方是值得改进的。如果落地失败,总结失败的原因是什么;总结如何防止再犯;

2024-01-29 14:13:59 1456

原创 响应式架构设计:性能更高更快的架构模式(框架部分后续再完善)

对刺激(请求)进行快速响应。对事件(event)立即响应。(事件驱动的自然特性使得反应能够立即加载实时,通过避免对共享资源的争用实现可扩展性)对失败(failure)立即响应。(在任何级别都可以建立一个能够实现失败恢复的弹性系统)对用户立即响应。(无论工作在何种负载下,都要满足用户对响应时间的要求)在java.util.concurrent.Flow包下:FlowAPI与Reactive Streams Specification相对应。

2024-01-29 14:12:59 776

原创 领域驱动设计(DDD)详解:微服务拆分神器

(写和读的责任分离)Command:执行动作,返回void。(行动可能会改变聚合、实体、值对象的内容)Query:只查询,不修改对象状态。适用CQRS的风格:事件驱动系统风格、管道过滤器风格。领域驱动设计中,对外提供功能的只有聚合根的功能,聚合根里面的实体尽量只对聚合根提供服务。聚合根的子对象,尽量都用实体对象封装。

2024-01-22 14:55:21 1385

原创 单元化(Set)架构设计详解:异地多活、突破扩展上限的优选方案

扩展性意味着,系统有可伸缩性/弹性,度量增加系统处理能力的指标。扩展性并不单单是系统能力本身,而是伸缩性&性能&成本等的综合考量的结果。系统处理能力(系统性能):延迟 - 系统处理单词请求所需时间;吞吐量 - 单位时间内系统处理次数。吞吐量越高越好,延迟越低越好。高伸缩性:添加资源就可以应对处理能力需求增长;意味着用户/流量/数据增长,性能指标不下降。伸缩性差:单用户性能正常;用户增长后性能指标下降;性能提升的成本高。

2024-01-22 14:54:17 1290

原创 微服务架构设计核心理论:掌握微服务设计精髓

单体应用时代,全都耦合在一起,牵一发而动全身。所有功能一起上线一起回滚。代码复杂度混乱。微服务时代,业务模式糙快猛,敏捷编程。小步快跑,独立演进,独立部署,快速迭代。团队赋能(每个微服务有各自团队)。边界清晰,以大化小-服务拆分,三高应用-分治。

2024-01-15 21:54:07 1317

Drools实战资料,配合文档使用

Drools实战资料

2023-11-22

Drools的WorkBench资料

Drools的WorkBench资料

2023-11-22

Tesseract OCR简体中文语言包

Tesseract OCR简体中文语言包

2023-09-13

谷歌浏览器xpath-helper

谷歌浏览器xpath-helper

2023-09-06

centos7下kubectl&minikube

centos7下kubectl&minikube,kubectl:1.16.2版本minikube:1.5.2版本

2023-07-03

minikube.exe,windows版本1.5.2

minikube.exe,windows版本1.5.2

2023-07-03

kubectl.exe,1.16.2版本

windows版本的kubectl.exe,1.16.2版本

2023-07-03

查找项目中的bug,快捷查找项目中的bug及代码漏洞

查找项目中的bug,快捷查找项目中的bug及代码漏洞

2023-02-17

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除