自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(131)
  • 资源 (6)
  • 收藏
  • 关注

原创 Spring Gateway转发websocket原理

Spring Cloud Gateway简称Spring Gateway,它可以转发请求到后端微服务。Spring Gateway除了转发HTTP请求,也支持websocket请求。我们看下它是怎么实现的吧。

2024-06-22 23:29:51 659

原创 主流Ai Agent平台分享

CozeDifyAutoGptGptsLLM是大语音模类似大脑,能理解用户说的话,做一些回复。但是它无法执行具体的action。Ai Agent定义是智能体,它基于LLM这个大脑,去完成大脑发出的指令。所以,从形式上Agent像是一个工作流,能完成一连串的任务。Agent会组合LLM、规划(Planning)、记忆(Memory)、工具(Tool Use)来完成一个具体的任务。规划(Planning)不同Agent在形式上会有所区别,Coze和Dify是通过可视化的方式,由用户手工组合不同工具。AutoGP

2024-06-21 09:25:00 874

原创 WebScoket scope类型

实例,并将该实例存储在WebSocket会话属性中。随后返回相同的实例,直到会话结束。WebSocket 作用域的 bean 调用了所有 Spring 生命周期方法,如前面的示例所示。这些通常是单例的,并且比任何个别的WebSocket会话的生命周期都长。每个 WebSocket 会话都有一个属性map。作用域中声明一个Spring管理的bean。你可以将WebSocket作用域的beans注入到控制器和注册在。与任何自定义作用域一样,Spring在第一次从控制器访问时初始化一个新的。

2024-06-05 20:02:38 265

原创 class结构之MethodParameters

u1代表1个字节,u2代表2个字节,一次类推。attribute_name_index是指向常量池里CONSTANT_Utf8_info类型的索引值,对应值是MethodParametersattribute_lenght代表属性值占用的长度parameters_count代表参数parameters的个数parameter.name_index是指向常量池里CONSTANT_Utf8_info类型的索引值,也就是参数名。

2024-06-05 09:33:40 379

原创 Spring STOMP-STOMP客户端

这在使用外部代理时可能会带来挑战,因为带有非代理destination 的消息代表活动,但实际并未转发到代理。进行性能测试以模拟同一台计算机上的数千个客户端时,请考虑关闭心跳,因为每个连接都会安排自己的心跳任务,并且对于在同一台计算机上运行的大量客户端而言,这并未进行优化。,并可以自定义心跳间隔(默认情况下,写入不活动为 10 秒,这会导致发送心跳;,确保即使只发送带有非代理destination 的消息,心跳也会被转发到代理。标头,服务器在处理完发送或订阅后,会响应RECEIPT帧。

2024-05-19 15:16:27 367

原创 STOMP协议1.2

STOMP 是一个简单的可互操作协议,设计用于异步消息传递,通过中介服务器在客户端之间进行。它定义了客户端和服务器之间传递消息的基于文本的线路格式。STOMP 已经活跃使用多年,并且被许多消息代理和客户端库支持。本规范定义了 STOMP 1.2 协议,并且是 STOMP 1.1 的更新。请将反馈发送至邮件列表。

2024-05-19 15:15:30 908

原创 Spring STOMP-拦截器

DISCONNECT消息可能来自客户端,也可能在WebSocket会话关闭时自动生成。在某些情况下,拦截器可能会对每个会话多次拦截此消息。组件应对多个断开事件保持幂等。为 STOMP 连接的生命周期提供通知,但并非针对每个客户端消息。来拦截处理链任何部分的任何消息。的子接口,并在处理消息的线程中提供回调。对于发送到通道的每条消息都会调用一次,但。在订阅来自通道的消息的每个。请注意,如前文所述的。

2024-05-16 19:24:41 529

原创 Spring STOMP-事件

当你使用外部代理时,如果代理暂时不可用,STOMP“代理中继”会自动重连“系统”连接。然而,客户端连接不会自动重连。假设心跳已启用,客户端通常会在10秒内注意到代理没有响应。客户端需要实现自己的重连逻辑。事件被发布,可以通过实现Spring的。

2024-05-16 19:24:11 389

原创 Spring STOMP-消息的顺序

支持,消息在不同的线程中被处理,客户端收到的结果的顺序可能与发布顺序不一样。,从而保证发布顺序。请注意,这会产生很小的性能开销,你应该在需要时才启用它。支持,消息在不同的线程中被处理,处理的顺序可能与它们被接收的确切顺序不匹配。,并从此处写入 WebSocket 会话。同样的原则也适用于客户端发送的消息,这些消息被发送到。设置该标志后,同一客户端会话中的消息逐一发布到。,然后根据它们的目的地前缀进行处理。要启用有序发布,可以如下设置。要启用有序发布,可以如下设置。来自代理的消息会发布到。

2024-05-15 20:58:58 333

原创 Spring STOMP-用户的目的地

这使得应用程序中的任何组件都可以发送针对特定用户的消息,而无需知道除用户名和通用destination之外的任何信息。如果用户有多个会话,则默认情况下,订阅给定destination的所有会话都会成为目标。这提供了订阅通用命名destination的便利,同时确保与其他订阅相同目的地的用户没有冲突,以便每个用户都可以接收到独特的股票位置更新。当你将用户目标与外部消息代理一起使用时,应检查代理文档了解如何管理不活动的队列,以便在用户会话结束后,删除所有唯一的用户队列。为前缀的destination。

2024-05-15 20:58:18 425

原创 Spring STOMP-权限

每个基于 WebSocket 的 STOMP 消息会话都以 HTTP 请求开始。这可以是升级到WebSocket的请求(即WebSocket握手),或者在SockJS回退的情况下,可以是一系列的SockJS HTTP传输请求。许多Web应用程序已经设置了认证和授权以保护HTTP请求的安全。通常情况下,用户通过Spring Security使用某种机制(如登录页面、HTTP基本认证或其它方式)进行认证。认证用户的安全上下文被保存在HTTP会话中,并与同一基于cookie的会话中的后续请求关联。

2024-05-14 21:48:10 1058

原创 Spring STOMP-使用点作为分隔符

在前面的示例中,我们没有更改“broker relay”上的前缀,因为这些完全取决于外部消息代理。请参阅你使用的消息代理的STOMP文档页面,了解它支持哪些目的地头的约定。这是Web应用程序中的一个良好惯例,并且与HTTP URL类似。然而,如果你更习惯于消息传递的惯例,你可以切换到使用点(,因此,如果你切换了分隔符,这个变更也适用于代理以及代理将消息中的destination与订阅中的模式进行匹配的方式。以下示例展示了用XML进行配置的方法,和java配置方式的效果一样。注解的方法时,它们会与。

2024-05-14 21:46:21 186

原创 Spring STOMP-连接到消息代理

默认情况下,STOMP代理中继始终保持连接,并在连接丢失时根据需要重新连接到相同的主机和端口。如果你希望提供多个地址,则在每次尝试连接时,你可以配置一个地址提供者,而不是固定的主机和端口。如果与代理的连接丢失,代理中继会继续尝试重新连接,每5秒一次,直到成功。STOMP代理中继还为每个连接的WebSocket客户端创建一个单独的TCP连接。来接收,当到消息代理的“系统”连接丢失和重新建立时的通知。标头,这可能会很有用(例如,在云环境中,建立TCP连接的实际主机与提供基于云的STOMP服务的主机不同)。

2024-05-13 21:17:34 355

原创 Spring STOMP-消息代理

内置的简单消息代理会处理来自客户端的订阅请求,将请求消息存储在内存中,并广播消息给匹配destination的连接客户端。代理支持路径式destination,包括订阅Ant风格的destinations模式。应用程序也可以使用点分隔(而不是斜线分隔)的destinations。见点作为章节。如果配置了任务调度器,简单代理就能支持检测。要配置调度器,你可以声明自己的bean,并通过设置上它。或者,你可以使用内置的WebSocket配置中自动声明的那个,但是你需要@Lazy。

2024-05-13 21:16:55 520

原创 Spring STOMP-发送消息

然而,如果存在另一个相同类型的bean,你也可以通过它的名称(brokerMessagingTemplate)来限定它。如果你想要从应用程序的任何地方向连接的客户端发送消息,要怎么做?任何应用程序组件都可以向。并使用它来发送消息。要这样做,最简单方法是注入一个。

2024-05-13 21:14:32 152

原创 Spring STOMP-带注解的控制器

应用程序可以使用带注解的类来处理来自客户端的消息。这些类可以声明带和注释注解的方法,能处理对应destination的消息。注解支持方法和类级别。在类级别,的配置会在所有方法上共享。默认情况下,映射值是Ant风格的路径模式(例如/thing*/thing/**),也支持模板变量(例如,这些值可以通过带注解的方法参数引用。应用程序也可以将destination的映射格式切换到点分隔的形式,如中解释的一样。

2024-05-12 21:45:35 934

原创 Spring STOMP-消息处理流程

前面两幅图的主要区别是,第二幅图使用了“broker relay”,通过TCP链接将消息发送到外部的STOMP代理,并将消息从代理发送到订阅的客户端。同一个controller也可以对HTTP请求做出相同的响应,因此客户端可以执行一个HTTP POST请求,处理请求的。一旦STOMP的接口被公布,Spring应用程序就成为连接客户端的STOMP代理。注解的程序,在处理客户端发的STOMP消息后,可以通过。方法可以向消息代理发送消息,然后广播给订阅的客户端。开头的消息可能会直接路由到消息代理。

2024-05-12 17:47:18 813

原创 Spring STOMP-WebSocket传输消息

对于Jakarta WebSocket服务器,在项目配置中添加一个。对于Jetty WebSocket服务器,如下这个例子自定义了。本节介绍怎么配置底层的WebSocket服务器的消息传输。例如,请参阅WebSocket部分下的。

2024-05-12 00:23:08 296

原创 Spring STOMP-开启STOMP

它们只是一种惯例,用于区分发布-订阅与点对点消息传递(即,许多订阅者与一个消费者)。当你使用外部代理时,请查看相应代理的STOMP介绍页面,去了解它支持STOMP哪种类型的destinations和前缀。通过Spring框架的spring-messaging和spring-websocket模块,提供了对WebSocket上STOMP的支持。即使这样做了,它们也会在服务器端被忽略(或者更确切地说,被覆盖)。或者,如果您通过SockJS连接,您可以在服务器端使用。,并在JavaScript端,按照。

2024-05-12 00:13:26 357

原创 Spring STOMP-好处

使用STOMP作为子协议,可以让Spring框架和Spring Security提供比直接使用原始WebSockets更丰富的编程模型。类似HTTP与原始TCP的比较,以及HTTP协议是如何让Spring MVC和其他Web框架拥有丰富的功能。

2024-05-11 23:56:33 200

原创 Spring STOMP-协议概述

在实际广播消息的场景,你也能在Spring里配置一个专业的STOMP消息代理(例如:RabbitMQ,ActiveMQ等)。在这种情况下,Spring维护到代理的TCP连接,将消息中继(转发来自客户端的STOMP消息)给代理,并将来自代理的消息下发给连接着的WebSocket客户端。因此,Spring web应用程序可以依赖统一的基于HTTP的安全机制、通用的验证和熟悉的编程模型来处理消息。服务器所有发送的消息都必须是对特定的客户端订阅的响应,并且服务端发送消息的。消息头必须和客户端订阅消息的。

2024-04-27 14:22:50 365

原创 SSE协议介绍

id字段id用于表示Event的序号,客户端通过序号实现断线重连功能。需要重连的时候,客户端在HTTP的header里加一个Last-Event-ID字段,把最后接收到的id传给服务端。服务端实现了重连功能,就能继续传Last-Event-ID之后的消息给客户端。event字段event表示自定义事件类型,客户端通过该字段区分不同消息。id:2data:你的data:名字叫什么?data字段data表示返回的业务数据,如果数据很长可以分成多行返回。id:1data:你data:好,retry字段。

2024-03-13 20:41:07 1142

原创 解决JVM进程被系统杀掉问题

遇到问题的时候,通过dmesg命令确定进程是被系统kill。然后,用 -XX:HeapDumpPath命令拿到堆信息。最后,通过MAT工具分析内存泄露的地方。

2024-03-13 20:40:11 1116

原创 Spring mvc原理之注册DispatcherServlet

spring boot的基础是tomcat,就要遵循tomcat的servlet规范。它通过ServletContextInitializer实现了Servlet的自动注册机制;用DispatcherServlet代理所有请求,内部实现了请求的路由、类型转换等。将开发者和tomcat解耦,也方便框架去替换不同的web容器。

2024-01-24 18:47:50 1154

原创 jasypt集成spring-boot原理解析

jasypt通过代理了所有的PropertySource,在获取属性之前,对属性进行解密。是PropertySource的包装类缓存了解密结果是的包装类先解析Spring的占位符实现了延迟加载对象是PBE加密机通过池化提升并发度。

2024-01-22 20:49:35 1881

原创 Mysql给json加索引

json列能添加多值索引,提高了json的查询性能。同时因为索引要指定列的类型,索引列就不能使用任意类型,这会失去一部分schemaless的能力。需要注意的是,使用cast函数添加索引时,要选择合适type,不然会出现类型转换失败的异常。

2024-01-22 14:32:00 1797

原创 SpringBoot升级到2.7.18后不兼容的地方

最近为了给kafka加性能指标采集功能,调研后发现spring-kafka在2.3版本之后就自带了Micrometer指标采集功能。但是当前项目的spring-boot版本是2.0.2.RELEASE,对应的spring-kafka版本是2.1.6.RELEASE,所以准备将spring-boot版本升级到2.7.18,这是2.x系列的最高版本,对应的spring-kafka版本是2.8.11。

2024-01-14 14:46:41 4126 3

原创 Innodb执行insert造成死锁的问题

起因是线上报了一个错误信息,Deadlock found when trying to get lock;try restarting transaction,这是Mysql检测到死锁后,自动回滚了事务引发的异常。spring框架里打印了异常堆栈,所以很快就定位到哪一行代码出了问题。看了代码逻辑,只有insert的时候会加一个行锁,死锁要有两个锁被多个线程账户等待,才会发生。就算有并发的情况,同时插入两条一样的记录,第二个事务也是处于等待锁的状态,等待锁超时后就报获取锁超时,也不会发生死锁。

2023-12-30 23:39:21 533

原创 处理读写分离延迟

要判断主从严格一致的成本是很高的,用到GTID来判断主从延迟,对代码的侵入性很高,而且要额外的查询GTID和判断GTID是否同步,性能也会受到影响。如果业务场景对一致性要求很高,为了简化编程,还不如直接查主库。如果对一致性要求不高,直接读从库,或者等待1秒也是不错的方式。

2023-12-20 23:04:46 499

原创 读写分离之同步延迟测试

读写分离是快速提高数据库性能的手段,主库只负责写入,从库负责查询。但在性能得到提升的同时,编程的复杂度就会提升。由其碰到主从同步延迟的情况,在数据写入后,在从库无法读取到最新数据,会对业务逻辑造成很大的影响。那么,我们如何发现主从延迟对业务有什么延续呢,那就需要人为的制造延迟,将问题暴露出来。

2023-12-18 22:39:00 763

原创 联合查询为什么小表要放在前面

在Mysql的查询优化里有一条经验,在联合查询时,SQL里要把小表放在大表的前面。小表是指数据量少的表。这个经验的原理是什么呢?这就要从Mysql的遍历方式开始说起。

2023-12-14 20:24:07 479

原创 Mysql日志binlog、redolog、undolog

这里的新版本并不是说一行记录会拷贝成多份,记录只存最新的一条,然后之前的版本会各自对应一条undo log,日志里会记录变更内容的原始值。这时会把修改先记录到log buffer,在提交事务时,先把redo log的状态设置为prepare并存入磁盘,然后提交binlog存入磁盘,最后将redo log设置为commit状态存日磁盘。另一个是用于数据库复制,通过将binlog传给其他数据库副本,然后再执行binlog中的sql实现数据的同步,构建出一套高可用的数据库服务。可以查看日志是否开启。

2023-12-07 14:25:51 1161

原创 数据库事务

Innodb引擎支持以事务的方式执行SQL,事务包含ACID四个特性,分别是原子性、一致性、隔离性和持久化。

2023-12-04 20:36:52 879

原创 Mysql索引总结

总结一下Mysql Innodb索引相关的知识,索引是以空间换时间的方式来加快查询速度。本质是将查询涉及的字段单独拎出来减少查询的基数和减少磁盘io次数,先做了排序可以用更高效的查询算法。同时索引也有一些弊端,需要占用额外的空间,还不少。数据写入时,维护索引的数据排序,要消耗cpu。随着索引数量增加,查询优化器要评估每个索引的效率,对于用不到的索引的评估时间,影响查询效率。

2023-11-28 23:47:48 840

原创 Sentinel网关限流

在微服务架构下,每个服务的性能都不同,为避免出现流量洪峰将服务冲垮,需要依赖限流工具来保护服务的稳定性。sentinel是阿里提供的限流工具,社区活跃,功能也很全面,包含实时监控、流控、熔断等功能。spring-gateway服务添加sentinel支持,并通过sentinel dashboard进行规则配置,规则数据存在nacos里,支持规则变更实时生效。sentinel包含7种规则类型,这些规则数据存放在nacos里。注意,使用网关模式对接时,限流规则不能放到flow类型下,要使用gw_flow类型。

2023-11-10 18:11:15 1226 1

原创 ShardingSphereJDBC5.4.0支持Nacos配置(SpringCloud版)

NacosConfigBootstrapConfiguration配置类是Spring Cloud通过org.springframework.cloud.bootstrap.BootstrapConfiguration=com.alibaba.cloud.nacos.NacosConfigBootstrapConfiguration方式加载。但使用ShardingSphere Driver后,也就无法通过spring-cloud-starter-alibaba-nacos-config自动载入数据库配置。

2023-10-07 15:55:40 3465 7

原创 RabbitMQ消息的链路跟踪

TraceId能标记一次请求的调用链路,在我们排查问题的时候十分重要。系统引入MQ后,MQ消息默认不带TraceId,所以消息发送和处理的链路就断了。下面分享如何对业务逻辑无感的方式,将TraceId带到消费端。

2023-09-28 16:15:38 1673

原创 Arthas热加载运行中的Java代码

热部署是指在不停止进程的情况下,重新加载新的java代码。例如,修改完方法里的代码后,将修改的逻辑重新注入到Jvm里。Arthas就给我们提供了这样的功能。

2023-09-28 14:26:59 213

原创 Arthas协助MQ消费性能优化

因为本次压测是在测试数据库,所以数据库本身不稳定,虽然定位到了这个性能瓶颈,对消费逻辑优化帮助不大,需要更精准的评估线上数据库的性能。但是通过monitor命令长时间观察doUpdateCoin方法的执行情况,发现大部分时间平均RT其实是比较低的,所以不应该是单次请求慢而降低了总体的消费TPS。可能是因为SQS消息拉取阶段存在瓶颈,所以尝试加大了消费的线程数、将单条拉取改成批量拉取。重新压测后,消费TPS从23提升到了342。

2023-08-04 12:30:50 1378 2

原创 ES优化复合排序

ES我们可以通过_score和sort控制排序规则,本文从实现play_score和publish_time复合排序出发,对比了多次查询、sort脚本排序、script_score打分脚本、field_value_factor打分函数这4种方式的实现和性能。得到2条结论:1. 使用ES自定义排序规则,能简化排序功能实现。2. 实现内置函数field_value_factor比使用脚本(sort脚本、script_score脚本)性能更好。

2023-05-14 19:24:45 1553

sentinel-dashboard-nacos.jar

sentinel nacos版后台,技术方案详情见博文:https://blog.csdn.net/xsgnzb/article/details/134338661

2023-11-10

UNIX超级工具

高清 UNIX超级工具! 高清 UNIX超级工具! 高清 UNIX超级工具! 高清 UNIX超级工具! 高清 UNIX超级工具!

2018-03-23

Net_Socket

Net_Socket-1.0.14.tgz

2015-01-16

Net_SMTP-1.6.2.tgz

Net_SMTP-1.6.2.tgz

2015-01-16

go-pear.phar

go-pear.phar

2015-01-16

PHPMailer_v5.1.zip

PHPMailer

2015-01-16

mmseg4j1.9

mmseg4j-1.9.1.zip

2014-08-28

空空如也

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

TA关注的人

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