04 2022 档案
摘要:使用 这款工具可以监控线上、测试或者其他环境的java运行中程序的情况,用于定位线上、测试等环境的问题。 一、安装与启动 通过termius远程登录测试或者线上环境,cd到指定目录下,输入命令: curl -O https://arthas.aliyun.com/arthas-boot.jar 我这
阅读全文
摘要:一、项目导入Apache的commons的Jar包。 Jar包Maven下载地址:https://mvnrepository.com/artifact/org.apache.commons/commons-lang3。 package com.taiping.touming; import org.
阅读全文
摘要:1,新建一个类,将下面代码拷贝进去 package com.sport.sportactivityserver.common.utils; import org.apache.commons.lang.StringUtils; import java.text.ParseException; imp
阅读全文
摘要:import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader;
阅读全文
摘要:想要搜索Jar中关键字,必须先把jar包源码下载下来,否则搜不到。 一、下载源码 Preferences --> Maven --> Importing,根据自己需求把Sources和Documentation勾选。 然后打开右侧Maven窗口,点击以下两个按钮其中一个均可,下载项目所有jar源码。
阅读全文
摘要:一、mysql需要设置支持批量更新 jdbc url 里的 allowMultiQueries 设置成true .可以批量更新 jdbc url参数详解参考:https://blog.csdn.net/weixin_34530489/article/details/113430433 二、自定义批量
阅读全文
摘要:一、tk.mapper 4.0版本之前 tk.mybatis.mapper.common.MySqlMapper中没有添加@tk.mybatis.mapper.annotation.RegisterMapper 这个注解,需要将该类配置到mappers中: 修改后的通用接口扫描代码: @Bean p
阅读全文
摘要:一、普通添加方法 ①创建一个主键生成策略的类,实现tk.mybatis.mapper.genid.GenId接口: import tk.mybatis.mapper.genid.GenId; public class IdWorker implements GenId<Long> { @Overri
阅读全文
摘要:注意:实验环境的IDEA版本:2021.3.1 1、问题描述 1.1、当想看源码时,点击Download Sources 1.2、此时出现了Cannot download sources 2、解决办法 2.1、首先点开Terminal窗口 2.2、根据项目路径,切换到项目根目录 注意:必须要切换到指
阅读全文
摘要:一、Executors提供四种线程池配置方案 1、构造一个固定线程数目的线程池,核心线程数与最大线程数相同,同时使用了一个无界LinkedBlockingQueue存放阻塞任务,因此多余的任务将存在阻塞队列,不会由RejectedExecutionHandler处理 //固定线程数目的线程池源码 p
阅读全文
摘要:参数 java多线程开发时,常常用到线程池技术,这篇文章是对创建java线程池时的七个参数的详细解释。 从源码中可以看出,线程池的构造函数有7个参数,分别是corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadFactory、
阅读全文
摘要:git push命令主要用于将本地更新推送到远程主机,但不同简化形式、命令参数产生延申效果。 一般形式 将本地分支localBranch推送到远程主机remote上对应的远程分支remoteBranch。此时若远程分支不存在,则会自动创建一个远程分支 $git push <远程主机名remote>
阅读全文
摘要:概述 大多时候注解不会用、用错,可能是你不了解这个注解导致的,有时候做测试得出的结论也会是片面的,建议根据其所属jar包看看官方文档,来理解、找解决方案 @JSONField 结束@JSONField之前,介绍一下fastjson,fastjson是阿里的开源解析库,支持将Java Bean序列化为
阅读全文
摘要:import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.a
阅读全文
摘要:参考:https://www.csdn.net/tags/NtTagg3sMDA4NDctYmxvZwO0O0OO0O0O.html#11_Criteria_114 TRANSLATE with x English Arabic Hebrew Polish Bulgarian Hindi Portu
阅读全文
摘要:使用 1)、统计总数,(将SQL语句变为 select count(0) from xxx,只对简单SQL语句其效果,复杂SQL语句需要自己写) Page<?> page = PageHelper.startPage(1,-1); long count = page.getTotal(); 2)、分
阅读全文
摘要:import lombok.Data; import tk.mybatis.mapper.annotation.KeySql; import javax.persistence.Id; import javax.persistence.Table; import java.util.Date; @D
阅读全文
摘要:MQ消息堆积是指生产者发送的消息短时间内在Broker端大量堆积,无法被消费者及时消费,从而导致业务功能无法正常使用。 消息堆积常见于以下几种情况: (1)新上线的消费者功能有BUG,消息无法被消费。 (2)消费者实例宕机或因网络问题暂时无法同Broker建立连接。 (3)生产者短时间内推送大量消息
阅读全文
摘要:At Most once,At Least once和Exactly once 在分布式系统中,组成系统的各个计算机是独立的。这些计算机有可能fail。 一个sender发送一条message到receiver。根据receiver出现fail时sender如何处理fail,可以将message d
阅读全文
摘要:Apache RocketMQ 作为阿里开源的业务消息的首选,通过双11业务打磨,在消息和流处理领域被广泛应用。而微服务生态Spring框架也是业务开发中最受开发者欢迎的框架之一,两者的完美契合使得RocketMQ成为Spring Messaing实现中最受欢迎的消息实现。 在Spring生态中使用
阅读全文
摘要:客户端配置 RocketMQ的客户端和服务端采取完全不一样的配置机制,客户端没有配置文件,所有的配置选项需要开发者使用对应的配置的setter进行设置。 注: 以下带 * 的,表示为重要参数。 ClientConfig RocketMQ的Producer(DefaultMQProducer)和Con
阅读全文
摘要:过期清理 所有的消费均是客户端发起Pull请求的,告诉消息的offset位置,broker去查询并返回。但是有一点需要非常明确的是,消息消费后,消息其实并没有物理地被清除,这是一个非常特殊的设计。本文来探索此设计的一些细节。 消费完后的消息去哪里了? 消息的存储是一直存在于CommitLog中的。而
阅读全文
摘要:如图所示,①:代表单线程debug;②:代表多线程debug; 在测试异步多线程时需要使用②,但是注意:使用②时,需要在进入断点之前,切换窗口到该工程,对应的窗口才会进入断点,不然就会跳过断点执行完,如下图: 进入线程断点之前,鼠标单击切换到对应的项目即可。 如果是单线程的debug,使用①打断点,
阅读全文
摘要:①:这里是直接throw一个异常,如果是调用别的方法,然后方法中抛出了异常,跟这个是一样的道理。这里也可以使用自定义异常。 异常输出效果: 结论:两个图①②对应的,说明默认的运行时异常、自定义异常都可以传递错误消息的,也就是try catch捕捉抛出的异常是可以在caused by中看到具体异常是在
阅读全文
摘要:问题记录 rocketmq-spring消费端怎么设置额外的原生属性 例子:rocketmq-spring 实现同一个group订阅多个topic,当然订阅多个tag也可以这么实现 @Slf4j @Service @RocketMQMessageListener(topic = "${rocketm
阅读全文
摘要:消费幂等 消息中间件是分布式系统常用的组件,无论是异步化、解耦、削峰等都有广泛的应用价值。我们通常会认为,消息中间件是一个可靠的组件——这里所谓的可靠是指,只要我把消息成功投递到了消息中间件,消息就不会丢失,即消息肯定会至少保证消息能被消费者成功消费一次,这是消息中间件最基本的特性之一,也就是我们常
阅读全文
摘要:很多时候只要觉得捕获 DuplicateKeyException 就行,其实这样还不够,底层还会抛出其他异常类型,完整的捕获如下: import org.springframework.dao.DuplicateKeyException; public void method() { try { r
阅读全文
摘要:可靠性保障 先上一个示意图 就上述的图示,我们逐步解析 step1:数据落库,这一步是必须的 step2:把消息落库,且初始化其状态为 0 (发送中) step3:把消息投递到 Broker 中 step4:Broker 发送成功应答 step5:生产者拿到成功应答,修改消息状态为1:(发送成功)
阅读全文
摘要:不知道大家对于这个问题遇到过没有,或者大家听到这个问题的第一反应是什么,应该如何做,如何避免消息丢失,一起来看看 首先我们知道rocketmq的一个消息从生产到最终的消费过程需要经历总共三个阶段,或者说会经过三个地方,分别是producer的发送端、broker的持久化机制、以及consumer的消
阅读全文
摘要:一、什么是消费幂等? 幂等:如果有一个操作,多次执行与一次执行所产生的影响是相同的,我们就称这个操作是幂等的。 基于上述的概念,结合消息消费的场景,我们能够总结出消息幂等的概念: 如果消息重试多次,消费者端对该重复消息消费多次与消费一次的结果是相同的,并且多次消费没有对系统产生副作用,那么我们就称这
阅读全文
摘要:1. 消息发送重试机制 1. 简介 producer对发送失败的消息进行重新发送的机制,称为消息发送重试机制,也称为消息重投机制。 有一些限制: 生产者在发送消息时,若采用同步或异步发送方式,发送失败会重试,但oneway 消息发送方式发送失败是没有重试机制的。 只有普通消息有重试,顺序消息没有重试
阅读全文
摘要:简单研究下rockermq 批量消息、过滤消息、事务消息的使用。 1. 批量消息 简介 批量消息的发送能提升投递小消息的性能。但是批量消息有一些限制,一批投递的消息应该有相同的主题、具有相同的刷盘策略、不支持延时消息与事务型消息。 另外,生产者发送消息的大小有一些限制。默认不超过1MB 的消息。如果
阅读全文
摘要:1. 简单消息 这里使用三种消息的发送方式: 同步发送、异步发送、单向发送,以及消息的消费。 同步发送 package com.zd.bx.rocketmq.simple; import org.apache.rocketmq.client.producer.DefaultMQProducer; i
阅读全文
摘要:低版本RocketMq-client clientId = ip + "@" + pid + ["@" +unitName] 高版本RocketMq-client clientId = ip + "@" + pid + # + 递增的随机数 + ["@" +unitName] Rocketmq-cl
阅读全文
摘要:背景 RocketMQ使用过程中为了快速搭建消费服务,于是在同一个机器集群消费的方式起了多个消费者实例,结果发现部分消息没被消费到!本文是对问题产生原因的跟踪和分析,下面会将项目中遇到的问题简化成官方demo来说明。 问题重现 生产者代码 Producer.java /* * Instantiate
阅读全文
摘要:前段时间有个朋友向我提了一个问题,他说在搭建 RocketMQ 集群过程中遇到了关于消费订阅的问题,然后他发了报错的日志给我看: the consumer's subscription not exist 我第一时间在源码里找到了报错的位置: org.apache.rocketmq.broker.p
阅读全文
摘要:实验步骤 准备 创建的topicA、topicB,每个都是16个消息队列; 创建了同一个消费者组:ntm-hxy-group 默认消息模式:负载均衡 消费者启动 消费者启动公共方法如下: /** * 消费者启动 * @param pushConsumerGroup 消费者组 * @param nam
阅读全文
摘要:实验现象 准备 创建的topicA、topicB,每个都是16个消息队列; 创建了同一个消费者组:ntm-hxy-group 默认消息模式:负载均衡 消费者一(clientId1) 先启动一个消费者一:clientId:192.168.31.182@10962#386194072446460 pub
阅读全文
摘要:前言 本篇是RocketMQ系列的第三篇原理(填坑)篇,会从客户端侧(Producer、Consumer)逐一对第一篇中提到的各种特性的实现原理进行解析。文中会出现较多的代码,建议对照源码阅读。 前篇说到RocketMQ是阿里巴巴团队开发并经过长期实践后捐赠给Apache开源基金会的消息中间件,所以
阅读全文
摘要:本篇以应用角度讲解RocketMQ的本地安装、启动与简单配置,以及各主要类的功能及使用方式。更多其它了解请参考: RocketMQ系列(一)——基础篇 RocketMQ系列(三)——原理篇 一、本地安装与部署 以windows平台为例,Linux、Mac OS类似 1、安装包下载地址 https:/
阅读全文
摘要:前言 本篇是RocketMQ系列的第一篇,主要针对对RocketMQ感兴趣或想系统学习RocketMQ的同学,内容相对基础,包括各种名称与术语解释、集群架构以及所支持的各种特性与适用场景。想深入了解其原理的请阅读后面的章节。 RocketMQ系列(二)——应用篇 RocketMQ系列(三)——原理篇
阅读全文
摘要:由String中hashcode的源码: public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++
阅读全文
摘要:转载:https://blog.csdn.net/qq_41556318/article/details/85014264 TRANSLATE with x English Arabic Hebrew Polish Bulgarian Hindi Portuguese Catalan Hmong D
阅读全文
摘要:前言 在Java中,每个对象都有一个从Object基类派生出的 hashCode() 方法,用于根据当前对象的某些特征返回一个整型变量。其核心源代码(省略一些类型判断与验证代码)如下所示: public static int hashCode(byte[] value) { int h = 0; f
阅读全文
摘要:以下是关于HashCode的官方文档定义 hashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。 hashCode 的常规协定是: 在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一
阅读全文
摘要:System.nanoTime()的初始值是在本JVM实例启动时"随机"选择的一个数字,随着JVM的运行而递增(常用来计算实时时间差),System.currentTimeMillis表示系统时间,这就导致了的它们的几个差别: System.currentTimeMillis()表示系统时间(即UT
阅读全文
摘要:什么是SPI SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 SPI的作用就是为这些被扩展的API寻找服务实现。 API (Application Programming Interface)在
阅读全文
摘要:源起 最近看log4j2源码发现PropertiesUtil类被用于获取配置信息(封装为PropertySource类),可以用于获取日志工厂的类名和配置工厂的类名等属性,log4j2默认为我们提供了以下实现类 PropertiesPropertySource:加载classpath:log4j2.
阅读全文
摘要:put与putIfAbsent的区别: 如果放入数据的key不在Map中,他俩是一样的,并且都会返回null。 如果放入数据的key存在Map中,put会把之前的给替换掉,返回之前的值。putIfAbsent不会把之前的给替换掉,也是返回之前的值。 总之就一句话,没有重复的他俩是一样的,有重复的pu
阅读全文
摘要:简介 在JUC包下提供了很多线程安全的队列,通常称之为阻塞队列。这些阻塞队列在线程池中的应用十分广泛,搞懂阻塞队列的实现原理,对平时使用阻塞队列会有很大帮助。本文将结合源码主要分析下LinkedBlockingQueue这个阻塞队列的实现原理。 LinkedBlockingQueue是一个基于链表实
阅读全文
摘要:现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能: 都需要访问/使用同一种资源 多个任务之间有依赖关系,某个任务的运行依赖于另一个任务 这两种情形是多任务编程中遇到的最基本的问题,也是多任务编程中的核心问题,同步和互斥就是用于解决这两个问题
阅读全文
摘要:在面向对象的语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类称为回调类,回调类的对象称为回调对象,其处理事件的方法叫做回调方法。(摘自百度百科) 那么通过上面那句话将百度百科中的“回调函数”翻译成JAVA版:回调方法就是一个通过回调对象的引用(java中的引用存的是对象的地址)调用的
阅读全文