- 博客(214)
- 资源 (1)
- 收藏
- 关注
原创 ActiveMQ 的传输协议机制
ActiveMQ 通过网络连接器这种连接机制来实现客户端与服务端之间的通信,ActiveMQ支持的传输协议在activeMQ 安装目录的 conf/activemq.xml中的<transportConnectors>标签之内。ActiveMQ 支持的 client 端和 broker 端的通讯协议有:TCP、NIO、UDP、SSL、Http(s)、VM。1、TCP 协议TCP 协议是...
2024-09-21 10:55:39
408
原创 ActiveMQ 的消息持久化策略
ActiveMQ 的消息持久化策略消息持久化对于可靠消息传递来说是一种比较好的方法,即使发送者和接受者不是同时在线,或者消息中心在发送者发送消息后宕机了,消息中心重启后仍然可以将消息发送出去。消息持久性的原理很简单,就是在发送消息出去后,消息中心首先将消息存储在本地文件、内存或者远程数据库,然后把消息发送给接受者,发送成功后再把消息从存储中删除,失败则继续尝试。消息中心启动以后首先要检查指定的存储...
2024-09-16 13:20:20
791
原创 做好职业规划,绘制璀璨蓝图!
我们来聊一聊如何做好职业规划,建立自己奋斗的目标和计划。1、使用 SWOT 模型分析自己的现状SWOT 分析通过对自己的优势、劣势、机会和威胁加以综合评估,做一个合理的自我分析,帮助我们更清楚地分析自己的现状,发现自身的优势和劣势,在工作中发现机遇和挑战,通过学习提升自己,可以使我们在工作中发挥更大的价值。使用上面的 SWOT 分析表,根据自身的情况,列出自己的优劣势,分析面对的机会和挑战,提前做...
2024-09-10 23:34:59
276
原创 ActiveMQ 的网络连接及消息回流机制
1、ActiveMQ 的网络连接activeMQ 如果要实现扩展性和高可用性的要求的话,就需要用用到网络连接模式。NetworkConnector:主要用来配置 broker 与 broker 之间的通信连接如上图所示,MQ 服务器1 和MQ 服务器2 通过 NewworkConnector 相连,则生产者1和生产者2发送消息,消费者3和消费者4都可以接收到,而生产者3和生产者4发送的消息,消费者...
2024-09-09 20:45:58
888
原创 Spring + ActiveMQ 整合实现发布/订阅(publish-subscribe)消息发送案例
本节演示发布/订阅(publish-subscribe)模式的消息发送的 Spring + ActiveMQ 代码。1、生产者代码spring 关键代码:springContext-activemq.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/sche...
2024-09-05 19:31:20
592
原创 Spring + ActiveMQ 整合实现点对点(point to point)消息发送案例
本节演示点对点模式的消息发送的 Spring + ActiveMQ 代码。Spring + ActiveMQ 整合1、依懒包spring:4.2.5.RELEASE,activemq-all:5.15.0<dependency> <groupId>javax.servlet</groupId> <artifactId>java...
2024-09-04 19:43:08
787
原创 ActiveMQ实战指南:实现发布/订阅(publish-subscribe)消息发送!
发布/订阅(publish-subscribe)消息发送消息生产者(发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消息。和点对点消息发送的方式不同,发布到 topic 的消息会被所有订阅者消费。发布/订阅的消息模型发布/订阅消息发送演示过程1、消息生产者在生产者工程 producer 里新建一个类 TopicSender 用于发布消息package producer;...
2024-08-29 09:03:25
561
原创 消息确认过程及死信队列说明
消息确认的过程ACK_MODE前面已经说过,消息的确认有三种模式:ACK_TYP虽然 Client 端指定了 ACK 模式,但是在 Client 与 broker 在交换 ACK 指令的时候,还需要告知ACK_TYPE, ACK_TYPE 表示此确认指令的类型,不同的 ACK_TYPE 将传递着不同的消息的状态,broker 可以根据不同的ACK_TYPE 对消息进行不同的操作。Client 端在...
2024-08-25 18:21:33
365
原创 JMS 的消息可靠性机制
消息传输在两个环节上进行:第一个环节是生产者发送消息到队列;第二个环节是消费者从队列获得消息。因此,在下面的三个阶段可能会使消息丢失:在生产者发送消息到代理的时候;当代理发生故障时在代理内存中的时候;在消费者从代理节点获取消息的时候;由于当代理发生故障时非持久性消息总是会丢失,因此可靠传输仅适用于持久性消息。可靠传递机制可保证传输过程在上述任一阶段都不会失败。消息的可靠性传递使用了两种机制来确保可...
2024-08-24 16:23:52
505
原创 ActiveMQ实战指南:实现点对点消息精准传递!
点对点(point to point)消息发送消息生产者生产消息发送到 queue 中,然后消息消费者从 queue 中取出并且消费消息。消息被消费以后,queue 中的消息被删掉,一个 queue 可以有多个消费者,但是对一个消息而言,只会有一个消费者可以消费到该消息。点对点消息发送演示过程1、启动 ActiveMQ打开 ActiveMQ 管理界面,点开 Queues 选项卡,没有队列,如下:2...
2024-08-07 12:11:26
260
原创 揭秘 ActiveMQ 消息的发送过程
ActiveMQ 消息的发送过程ActiveMQ 支持同步、异步两种发送模式将消息发送到broker上。同步发送过程中,发送是阻塞的,直到收到确认。发送者发送一条消息会阻塞,直到 broker 反馈一个确认消息,表示消息已经被 broker 处理。这个机制提供了消息的安全性保障,但是由于是阻塞的操作,会影响到客户端消息发送的性能。异步发送的过程中,发送者不需要等待 broker 的确认,所以性能相...
2024-08-05 12:08:49
916
原创 深入探索MOM世界:揭秘JMS规范,解锁消息传递的无限可能!
什么是MOMMOM(Message Oriented Middleware)是面向消息的中间件,使用消息传送提供者来协调消息传送操作。MOM 需要提供 API 和管理工具。客户端使用 API 调用,把消息发送到由提供者管理的目的地。在发送消息之后,客户端会继续执行其他工作,并且在接收方收到这个消息确认之前,提供者一直保留该消息。目前主流标准有 JMS(Java Message Service)、A...
2024-07-31 20:00:32
373
原创 揭秘消息中间件:探索ActiveMQ的神奇世界!
一、什么是消息中间件?消息中间件通也被称为消息队列服务器,是当今分布式应用架构中经常采用的技术。在系统软件中,操作系统、数据库、中间件三驾马车,对于专业人士来说,中间件也是最神秘的。中间件是一个专业化非常强的细分产业,中间件的技术门槛较高。但是从 2008 年开始中间件得到了蓬勃发展,开发者对中间件这个词不再陌生,周围被各种中间件围绕。其中消息队列是开发中经常用到的一种中间件技术。消息中间件是利用...
2024-07-30 21:37:05
263
原创 揭秘IO流绝技,内存、打印、压缩流一手掌控!
之前三篇文章分别讲解了 File 类,操作 IO 的套路,不能不懂的处理流。今天的文章是 Java IO 的大结局,我们来聊聊 IO 的其它几个有用的流,内存流,打印流、压缩流。1内存操作流前面讲解的输入和输出都是操作文件的,其实我们也可以将内容写到内存,以及从内存中读取数据。内存操作流也就是字节数组节点流,分为字节数组输入流和字节数组输出流。我们可以使用字节数组输入流 BufferedInput...
2024-07-18 12:30:49
665
原创 精通IO流:文件处理的必备技能!
我们在掌握了 File 类、字节流、字符流,学会了 IO 操作的套路之后,IO 操作基本上就能处理日常工作中80%的常用问题了。今天再给大家介绍一下处理流,学会处理流之后,日常工作中的文件操作就都可以应对了,掌握了下面的处理流,你将如虎添翼。我们知道从 IO 流的功能来划分,IO 流分为:节点流和处理流。其中,节点流是用来包装数据源(File)的,它直接和数据源连接,表示从一个节点读取数据或者把数...
2024-07-17 12:02:21
656
原创 掌握 MySQL 中 SQL 语句的执行过程
作为开发人员都非常清楚,当我们写好一个 sql 语句之后,连接到数据库点击执行,数据库就会返回我们要查询或者更新的结果。但是,数据库服务器在接收到一个 sql 请求后内部是如何处理的,可能就不太清楚了。这一节主要为大家讲解从客户端发起一个 sql 语句的查询,数据库服务器内部的一个处理流程。从下面的一个 MySQL 请求的处理流程图中可以看出,MySQL 的处理流程主要分为4个步骤:客户端与服务端...
2024-07-16 12:35:14
947
原创 揭秘文件操作精髓:深入探索IO流的奥秘与力量!
上一篇文章我们认识了文件操作的源头 File 类,这篇文章就来聊聊文件操作的核心 IO 流。我们经常可以听到:输入流、输出流、字节流、字符流、节点流、处理流等词语,咋一听,忍不住“哇~~~!”的一声,心里在想:“感觉好复杂的样子,学习 IO 流需要知道这么多东西啊!”,从而有了畏难的情绪。大家千万不要被这些词语吓到,望而却步,它们只不过是从三个维度对 IO 流的总结。学习 IO 流是有套路的,通过...
2024-07-15 13:47:59
756
原创 深入探索Java的File类:文件操作的基石!
IO 流是 Java 开发中非常重要的一个内容,掌握了 IO 流的分类与使用对Java 程序员来说至关重要,最近发现有很多面试者对 Java IO 的理解没有形成体系,只知道其中的一些概念名词,不知道其具体用法。这个Java IO 的系列文章,希望可以让更多的同学快速掌握 IO 流的使用。1初识 Java IOJava IO 操作主要指的是使用Java进行输入、输出操作,Java 中的所有 IO...
2024-07-14 11:54:42
854
原创 探索Java网络编程精髓:UDP与TCP的实战魔法!
Java 中提供了专门的网络编程程序包 java.net,提供了两种通信协议:UDP(数据报协议)和 TCP(传输控制协议),本文对两种通信协议的开发进行详细介绍。1UDP 介绍UDP:User Datagram Protocol,是一种无连接的传输层协议,是不可靠的消息传输服务。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。UDP 的特点是非面向连接,传输不可靠,...
2024-07-11 12:00:11
766
原创 揭秘MySQL服务器性能调优的顶级策略!
在工作中,我们发现慢查询一般有2个途径,一个是被动的,一个是主动的。被动的是当业务人员反馈某个查询界面响应的时间特别长,你才去处理。主动的是通过通过分析慢查询日志来主动发现执行效率缓慢的 sql 语句,或者通过 information_schema.processlist 实时查询执行缓慢的 sql。1分析慢查询日志1、分析慢查询日志的步骤1、通过命令查看数据库是否开启慢查询日志:showvar...
2024-07-09 10:22:29
208
原创 掌握SQL性能调优:深入解析EXPLAIN命令的神奇用法!
在之前 sql 语句执行过程的内容中,我们提到了查询优化器的内容,下面对其进行详细说明。explain 用于获取查询执行计划(即有关MySQL如何执行查询的说明)。explain 经常与 SELECT,DELETE,INSERT,REPLACE 和 UPDATE 语句一起使用,用来分析这些 sql 语句的执行计划,当 explain 与可解释的语句一起使用时,MySQL 将显示来自优化器的有关语句...
2024-07-08 12:31:19
179
原创 深入揭秘:MySQL中MVCC的神奇原理
要解决读一致性的问题,保证一个事务中前后两次读取数据结果一致,还有一种 MVCC 的方式,又叫多版本的并发控制(Multi Version Concurrency Control)。MVCC 就是为了让一个事务前后两次读取到的数据保持一致,在修改数据的时候给它建立一个快照,后面的查询操作读取这个快照就可以了。MVCC 解决了加上排他锁后的行记录,可以被查询到的问题,从而解决了由于写操作阻塞而引发读...
2024-07-07 10:31:02
685
原创 InnoDB的隔离级别实现机制深度解析
MySQL 数据库 InnoDB 存储引擎的隔离级别是通过锁和 MVCC 的机制实现的。1了解 MySQL 中锁的机制锁是用于避免不同事务对共享资源的并发访问的产生读一致性的问题的机制。1、表锁和行锁InnoDB 存储引擎支持行锁和表锁,行锁就是锁住表里面的一行数据,用共享(S)锁和排他(X)锁来实现行锁;表锁就是锁住一张表,意向锁是表级锁,InnoDB 的表锁是通过行锁实现的,就是把表里所有的行...
2024-07-04 22:38:27
514
原创 数据库并发问题的挑战与解决之道
假设没有事务的隔离性,当两个事务并发地去操作数据库的表或者行的时候,那么会产生什么问题?1并发给数据库带来的问题1、读脏数据A 事务修改了一个数据(假设 A 从 1 改为 2),B 事务读取 A 事务修改后的数据(B 读取到了 2),但由于某种原因 A 事务撤销了事务(这个数据回滚到 1),此时导致 B 事务读取到的数据不正确(B 认为数据是 2),这就表示 B 事务读取到了脏数据,一般称为脏读。...
2024-07-02 19:12:39
746
原创 揭秘数据库事务:确保数据完整性的关键!
事务是必须掌握的数据库知识,下面我们一起来研究下数据库事务吧。1什么是事务事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成,事务是不可以再分的最小的数据库工作单元,它包含了一个或者多个 DML 语句,比如 insert、update、delete。InnoDB 存储引擎是支持事务的,这也是它成为默认的存储引擎的一个重要原因。最常见的事务操作就是金融系统的银行...
2024-07-01 12:59:46
596
原创 深入探索数据库索引的奥秘:加速数据检索的利器!
索引是必须掌握的数据库知识,下面我们一起来研究下数据库索引吧。1索引的几个概念单列索引:索引节点中的关键字是一个列的内容,也叫普通索引,比如:用身份证号做索引,用手机号做索引。联合索引:索引节点中的关键字是多个列的内容,经常在需要用多个字段查询的时候用到。比如:用手机号+时间做索引,或者手机号+时间+状态做索引;也就是说单列索引是特殊的联合索引。唯一索引:索引列的值必须唯一,但允许有空值;如果是联...
2024-06-30 16:36:19
969
原创 MySQL性能秘籍:揭秘缓冲与索引的魔法!
一般情况下,我们不会用到数据库自带的缓存,所以 MySQL 默认是不开启缓存的。只有以读为主的业务,数据不变化的情况下,可以开启数据库的缓存。查看缓存是否开启:show variables like 'query_cache%';queyr_cache_type:on,表示缓存开启,默认是关闭的,可以通过修改 MySQL 配置文件 my.cnf 进行调整,重启服务后生效。query_cache_l...
2024-06-29 10:15:22
429
原创 深入MySQL核心:解锁数据引擎的奥秘!
本文介绍 MySQL 的数据引擎。在 MySQL5.1 的中文文档资料里,有如下的一张 MySQL 插件式存储引擎的体系结构图,通过这张图, 我们能很好地了解 MySQL 的整体架构。网址:https://www.mysqlzh.com/doc/134.html从以上的架构图我们可以看出,最上面的 Connectors 表示客户端,客户端就是一些具体的链接协议;下面的 MySQL Server 表...
2024-06-28 12:16:53
481
原创 MySQL 数据库开发神器:Navicat 客户端高效使用指南!
本文介绍 MySQL 的客户端工具 Navicat 的使用。Navicat for MySQL 是一套管理和开发 MySQL 数据库的优秀软件,可连接到任何本机或远程 MySQL 数据库服务器,并支持:表、视图、函数或过程、事件等大部分数据库功能,包括 SQL 创建工具或编辑器、数据模型工具、数据传输、导入或导出、数据或结构同步等操作。Navicat下载地址:http://www.navicat....
2024-06-26 11:59:58
267
原创 MySQL数据库开发进阶:精通数据库表的创建与管理!
本文介绍数据库的创建与删除,数据表的创建与管理。1MySQL 环境变量配置为了方便在 CMD 命令行工具操作,我们配置一下 MySQL 的环境变量。点击此电脑-->属性-->高级系统设置-->环境变量--->在系统变量里面点击新建系统变量,如下:把新建的 mysql 变量添加到 Path 路径变量中,添加以下的内容,点击确定即可。%mysql%\bin环境变量配置好之后,就...
2024-06-25 13:59:45
452
原创 MySQL数据库初学者指南:从安装到常用命令的飞跃!
本文介绍 MySQL 的安装详细图文教程以及常用命令介绍。1MySQL下载1、官网下载下载地址:https://dev.mysql.com/downloads/,选择社区版目前 MySQL 最新版本为 8.0.23,如果想下载之前的版本可以点击“Looking for previous GA versions?”在 Archives 选项卡里可以找到所有归档的版本。这里选择下载 MySQL5...
2024-06-24 20:00:27
900
原创 如何优雅地调控并发世界的秩序?
Java所有的线程在运行前都会保持在就绪状态,哪个线程的优先级高,哪个线程就有可能会先执行。Java程序中有最高、中等、最低3种优先级,使用setPriority方法可以设置一个线程的优先级。示例1:演示3种不同优先级的线程执行结果public class TaskPriority implements Runnable {@Overridepublic void run() {for (i...
2024-05-29 08:59:39
266
1
原创 掌握并发控制的“急刹车”艺术!
当一个线程运行时,另外一个线程可以直接通过interrupt方法对其设置中断标志位。判断线程是否中断的2个方法:// 判断目标线程是否被中断,不会清除中断标记。Thread.currentThread().isInterrupted()// 判断目标线程是否被中断,会清除中断标记Thread.interrupted()示例1:判断目标线程是否被中断,不会清除中断标记public class T...
2024-05-27 20:52:55
256
原创 守护线程
在Java程序中有两类线程,分别是用户线程(前台线程)、守护线程(后台线程)。JVM处理垃圾回收的GC线程就是后台线程,我们在开发中创建的线程用于处理指定的任务的一般都是前台线程。从前台线程转变为后台线程可以在start方法启动前使用setDaemon(true)方法来将其设置为后台线程,使用isDaemon()来判断线程是否为后台线程。示例1:把一个线程设置为后台线程,并判断其是否为后台线程pu...
2024-05-27 09:02:54
194
原创 线程控制的艺术:强制运行、优雅礼让与智能休眠
1.线程的强制运行在线程操作中,我们可以使用join方法让一个线程强制运行,某一个线程强制运行期间,其他线程无法运行,必须等待该线程执行完成之后才可以执行。示例:线程的强制运行为了更好地看出演示的效果,我们把上面的Task线程类修改为输出1-10的数字。public class Task1 implements Runnable { @Overridepublic void run() {...
2024-05-26 12:12:08
306
原创 如何判断线程是否启动?
虽然Thread类实现了Runnable接口,但是操作线程的主要方法并不在Runnable接口中,多线程操作,主要是通过Thread类中的方法实现。线程的创建是用Thread类的构造方法,因此线程操作的主要方法是Thread类中的方法。本文介绍如何判断线程是否启动。通过Thread类中的start方法通知CPU这个线程已经准备好了,等待分配CPU资源后运行线程。在Java中可以使用isAlive方...
2024-05-24 09:00:26
476
原创 线程的生命周期以及设置和获取线程名称
虽然Thread类实现了Runnable接口,但是操作线程的主要方法并不在Runnable接口中,多线程操作,主要是通过Thread类中的方法实现。1线程的生命周期要想实现多线程,必须在主线程中创建新的线程对象。任何线程一般具有5种状态:创建、就绪、运行、阻塞、终止。线程状态的变化与方法之间的关系如下图:01、创建状态(NEW)新建一个线程对象后,新的线程对象就处于新建状态,此时它处于不可运行状态...
2024-05-23 09:02:25
369
原创 这两大品质将铸就你的成功之翼
在人生的舞台上,每个人都渴望展现自己的实力,实现自己的梦想。然而,实力的培养并非一蹴而就,它需要我们在日常生活中不断地磨砺和积累。注重调查研究和才能积累无疑是实力增长的两大关键要素,它们就像实力的双翼,助力我们飞得更高、更远。传说苏格拉底曾带弟子到一片麦地,让他们从中选出最大的麦穗,但是不能走回头路,也只能摘一支。第一个弟子刚走没几步就摘了一个自认为最大的,当后面还有更大的时,就后悔不及。第二个弟...
2024-05-19 12:02:42
316
原创 选择比机会重要,以耐性赢得博弈
在人生的大舞台上,我们每个人都是演员,而生活中的每一次选择都像是剧本中的关键转折。讲一个关于三个人的故事,他们因不同的选择而走向了截然不同的人生轨迹。有三个人要被关进监狱三年,监狱长同意满足他们每人一个要求。美国人要了三箱雪茄,法国人要了一个美丽的女子,犹太人要了一部与外界沟通的电话。三年后,当监狱的大门缓缓打开,我们看到了三种截然不同的结局。一个嘴里塞满了雪茄的美国人首先冲出来,大叫“给我火,给...
2024-05-18 09:00:14
175
原创 掌握单例模式,让你的代码更高效、更优雅!
单例模式(Singleton Pattern)是Java中最简单的设计模式之一,属于创建型模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式就是为了使资源能够共享,只需要初始化一次,其它人就能够重复利用,避免一个类频繁地创建和销毁。使用场景:1、生产唯一序列号。2、WEB 中的计数器用单例先缓存起来,不用每次刷新都在数据库里加一次。3、配置信息config。核心:构造函数私有化,...
2024-05-11 21:33:23
464
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人