- 博客(109)
- 资源 (19)
- 论坛 (2)
- 问答 (1)
- 收藏
- 关注

原创 【kafka原理】kafka Log存储解析以及索引机制
本文设置到的配置项有名称描述类型默认num.partitionstopic的默认分区数int1log.dirs保存日志数据的目录。如果未设置,则使用log.dir中的值string/tmp/kafka-logsoffsets.topic.replication.factoroffset topic复制因子(ps:就是备份数,设置的越高来确保可用性)。为了确保offset topic有效的复制因子,第一次请求offset topic时,活的broker的数量
2020-10-26 19:26:19
354

原创 【SpringBoot】SpringBoot启动流程图和扩展点说明
下图是SpringBoot的启动流程图图中 表示扩展点的标识;图中的Spring启动的过程 省略未画; 后续会补充上;如果图看不清,可以打开以下链接查看SpringBoot启动流程以扩展点说明图密码: src666
2020-08-31 17:16:10
244

原创 多版本并行开发测试解决方案
背景与挑战为了支撑业务的飞速发展,分布式系统架构不断演进,业务链路日趋复杂,服务间相互调用,增加了服务联调的复杂性;在如此研发背景下,作为研发过程中不可或缺的一环业务链路联调,面临越来越多的挑战:联调涉及应用服务多,导致环境构建和维护的成本都非常高,手工搭建一套可用联调环境,少则1-2天,部分情况下甚至可能花费1到2周。因此,如何降低联调环境构建成本,让研发同学专注于业务联调本身?联调链...
2020-05-09 10:20:42
750

原创 我写的dubbo扩展jar包如何无侵入的给别人使用
有这么一个场景, 我写了一个dubbo spi扩展jar包 dubbo-ext.jar; 这个Jar包是不可执行包(没有main函数), 它的作用是对现有运行的dubbo服务做一些增强;那么这样的一个扩展包,要符合即插即用的原则;要无侵入的增强;正常情况下我们可能直接在pom文件依赖一下这个包;因为无侵入原则,那么这条路就不能走了; 那可怎么办呢?1.Tomcat启动方式如果目标服务是用T...
2019-12-09 20:12:37
4369

原创 【Nacos配置管理】一文带你搞懂Nacos配置管理模块
总结Nacos配置管理操作流程可以 做 ip hash定位使用哪台机器;每次都访问同一台机器 ,或者做共享session;集群列表的配置文件,第3步通知的时候就是读取这里获取集群所有服务器列表给配置文件中的集群列表发送给一个http请求,通知有配置修改了本地磁盘中的文件,在服务端启动的时候就会将配置全部dunmp到本地磁盘, 这里修改了,也会修改对应的磁盘中的配置,服务端内存中存的只...
2019-10-10 09:22:54
5732
6

原创 基于Redis实现DelayQueue延迟队列设计方案
应用场景创建订单10分钟之后自动支付叫预约单专车出行前30分钟发送短信提示订单超时取消…等等…实现方式最简单的方式,定时扫表;例如每分钟扫表一次十分钟之后未支付的订单进行主动支付 ;优点: 简单缺点: 每分钟全局扫表,浪费资源,有一分钟延迟使用RabbitMq 实现 RabbitMq实现延迟队列优点: 开源,现成的稳定的实现方案;缺点: RabbitMq是一个...
2019-08-08 15:50:29
24608
37
原创 Dubbo下的多版本并行开发测试解决方案(服务路由)
在很久之前的文章多版本并行开发测试解决方案 中挖了个坑今天来给填上; 今天主要讲解实现方案;主要思路给不同版本的dubbo服务打上 标签version上在dubbo 提供和消费的出入口上 带上 标签version服务消费进行路由的时候 给他找到相同标签version的提供者 进行消费;如果没有就给它稳定版本是不是很简单,就是打个标签,然后路由的时候找相同服务嘛简单代码打标签写个Register的Wrapper类 将标签注册上去 这里我是将标签绑定到了dubbo的属性applica
2021-01-08 19:48:55
29
原创 【spring-kafka】@KafkaListener详解与使用
说明从2.2.4版开始,您可以直接在注释上指定Kafka使用者属性,这些属性将覆盖在使用者工厂中配置的具有相同名称的所有属性。您不能通过这种方式指定group.id和client.id属性。他们将被忽略;可以使用#{…}或属性占位符(${…})在SpEL上配置注释上的大多数属性。比如: @KafkaListener(id = "consumer-id",topics = "SHI_TOPIC1",concurrency = "${listen.concurrency:3}",
2021-01-07 17:09:27
155
原创 【kafka】kafka的服务复用与隔离设计方案
之前在写 多版本并行开发测试解决方案 的时候 占了个坑,今天来补上;这篇文章主要讲一下 kafka的服务复用与隔离;主要解决的问题是,在多个迭代环境下; 让消息的提供者和消费者都能正确的发出和消费;这个比dubbo的服务路由与隔离更复杂一点1.问题描述概念说明:稳定版本: ABC 属于全局共用的一套稳定服务;迭代版本: A1 C1 C2 属于他们对应系统的迭代版本, 比如针对A系统进行需求改动,部署一套新的迭代服务A1;要求: mq提供者服务提供出去的消息尽量让 相同版本的消费者进行消费;
2021-01-07 14:19:10
100
原创 【kafka】常用命令汇总
目录查询1.查看所有或者指定Topic的信息2.列出所有Topic3.新消费者列表查询4.显示某个消费组的消费详情(0.10.1.0版本+)TODO查询1.查看所有或者指定Topic的信息查看Topic的分区情况 副本情况和 配置情况## 所有bin/kafka-topics.sh --describe --zookeeper xxxx ##指定bin/kafka-topics.sh --describe --zookeeper xxxx --topic TOPIC名称输出[roo
2020-11-19 16:25:31
64
原创 【spring-kafka】属性concurrency的作用及如何配置(RoundRobinAssignor 、RangeAssignor)
目录concurrency属性作用什么情况下设置concurrency,以及设置多少不同配置的实验分析分区数3|concurrency = 1|启动一个客户端(单机)分区数3|concurrency = 1|启动2个客户端(分布式模式)分区数3|concurrency = 3|启动一个客户端分区数3|concurrency = 3|启动2个客户端(分布式模式)批量消费concurrency属性作用concurrency默认是1;container.setConcurrency(3)表示创建三个Kaf
2020-11-18 18:54:34
522
4
原创 【kafka异常】使用Spring-kafka遇到的坑
CORRUPT_MESSAGE这个错误一般是压缩策略为cleanup.policy=compact的情况下,key不能为空o.a.k.c.p.i.Sender 595 [WARN] [Producer clientId=producer-1] Got error produce response with correlation id 131 on topic-partition SHI_TOPIC1-0, retrying (2147483521 attempts left). Error: COR
2020-11-18 15:25:34
1864
1
原创 【Redis】位图以及位图的使用场景(统计在线人数和用户在线状态)
位图位图的最大优点之一是,它们在存储信息时通常可以节省大量空间位图不是一个真实的数据类型,而是定义在字符串类型上的面向位的操作的集合。由于字符串类型是二进制安全的二进制大对象,并且最大长度是 512MB,适合于设置 2^32^个不同的位。位操作分为两组:常量时间单个位的操作,像设置一个位为 1 或者 0,或者获取该位的值。对一组位的操作,例如计算指定范围位的置位数量。 1字节=1B=2^3b=8位 1KB=2^10^B 1MB=2^10^KB 512MB=2^9^ X 2^10^
2020-11-10 17:27:22
175
原创 【Redis】redis安装与客户端redis-cli的使用(批量操作)
在Centos中安装Redis安装步骤先创建一个文件夹用于存放redismkdir /data/redis & cd /data/redis1.使用以下命令下载,提取和编译Redis: wget https://download.redis.io/releases/redis-6.0.9.tar.gz tar xzf redis-6.0.9.tar.gz cd redis-6.0.9 make make test最新稳定版本请看 https://redis.io/downloa
2020-11-09 15:56:45
253
原创 【kafka问题】记一次kafka消费者未接收到消息问题
今天出现了这样一个问题, A说他的kafka消息发送了; B说它没有接收到; 那么问题来了:A的消息是否发送了?如果A的消息发送成功了; B为何没有消费到?好,带着上面的问题,我们来一步步排查一下问题所在查询kafka消息是否发送成功1.1.从头消费一下对应的topic;再查询刚刚发送的关键词bin/kafka-console-consumer.sh --bootstrap-server xxx1:9092,xxx2:9092,xxx3:9092 --topic topic名称 -from-
2020-10-30 15:06:59
454
原创 【kafka原理】Kafka生产者 (分区策略和ACK应答机制)
分区策略分区原因方便再集群中扩展,每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了;可以提高并发,因为可以以partition为单位读写分区原则我们需要将producer发送的数据封装成一个ProducerRecord对象指明 partition 的情况下,直接将指明的值直接作为 partiton 值;没有指明 partition 值但有 key 的情况下,将 key 的 hash 值与 t
2020-10-28 15:15:28
539
3
原创 【kafka原理】消费者提交已消费的偏移量
那在上一篇文章中我们了解了 消费者偏移量__consumer_offsets_,知道了 消费者在消费了消息之后会把消费的offset 更新到以 名称为__consumer_offsets_的内置Topic中; 每个消费组都有维护一个当前消费组的offset; 那么就会有以下疑问到底消费组什么时候把offset更新到broker中的分区中呢? 每次消费一条消息就提交到 broker中去更新?那这样是不是会有一些效率的一些问题?既然有了疑问 ,那么我们本篇文章就来好好分析一下这个问题!通过查询 kaf
2020-10-27 16:57:35
276
原创 【kafka原理】 消费者偏移量__consumer_offsets_相关解析
我们在kafka的log文件中发现了还有很多以 __consumer_offsets_的文件夹;总共50个;由于Zookeeper并不适合大批量的频繁写入操作,新版Kafka已推荐将consumer的位移信息保存在Kafka内部的topic中,即__consumer_offsets topic,并且默认提供了kafka_consumer_groups.sh脚本供用户查看consumer信息。__consumer_offsets 是 kafka 自行创建的,和普通的 topic 相同。它存在的目的之一就
2020-10-27 14:21:43
510
原创 【Log日志】打印mybatis中sql日志并存放到指定文件中
打印mybatis中sql日志并存放到指定文件中logback-spring.xml (如果是logbackx.xml 动态路径会失效)<?xml version="1.0" encoding="UTF-8"?><configuration> <!-- 子节点<property> :用来定义变量值,它有两个属性name和value,通过<property>定义的值会被插入到logger上下文中,可以使“${}”来使用变量--> <
2020-10-21 16:10:57
805
1
原创 【Log日志】在日志系统初始化之前如何打印日志
之前在文章 使用Nacos简化SpringBoot配置(所有配置放入到Nacos中) 中有实现一个 EnvironmentPostProcessor的扩展接口;但是发现日志并没有打印出来, 然后就跟着源码找了一下问题;问题原因:在SpringBoot加载的过程中 EnvironmentPostProcessor 的执行比较早; 这个时候日志系统根本就还没有初始化;所以在此之前的日志操作都不会有效果;看看日志系统加载的时机日志系统初始化的地方 LoggingApplicationListen
2020-10-21 15:34:19
149
原创 【Log日志】logback.xml动态配置属性值(包括接入的第三方配置)
我们在开发过程中,会使用到logback.xml 配置来管理日志文件;比如 <appender name="common" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/common.log</file> <append>true</append> <encoder> <pattern>%d{yyyy
2020-10-20 17:51:32
424
原创 【SpringBoot】使用Nacos简化SpringBoot配置(所有配置放入到Nacos中)
本篇文章主要讲述以下几个知识点 Nacos属性的简单使用 将SpringBoot中的所有配置全部放入到Nacos中 开发人创建单独的命名空间,修改互不影响 Nacos经常变动的配置抽离到外部文件中将项目中的所有配置全部放到到1. 首先引入包 <!-- nacos 接入--> <!-- https://mvnrepository.com/artifact/com.alibaba.boot/nacos-config-spring-boot
2020-10-20 11:43:43
732
3
原创 【SpringBoot】配置文件的加载与属性值的绑定
Question在使用SpringBoot过程中你是否会有以下疑问?具体有多少种配置属性源的方式呢?为何使用@Value 注解就能够获取到属性源中的值呢?属性源这么多,如果属性相同的话 那么用哪个值呢?属性源是如何绑定到我们的程序中的呢?Nacos是如果接入到SpringBoot中的呢?为什么@NacosValue可以获取到Nacos中的值并且还是实时刷新的?有没有什么方式可以将SpringBoot中的静态配置全部移动到Nacos中去吗?本篇文章会针对以上问题逐个分析Answer
2020-09-27 17:23:57
373
原创 【Spring Boot 四】启动之准备系统环境environmentPrepared
environmentPrepared系统环境已经准备就绪 private ConfigurableEnvironment prepareEnvironment( SpringApplicationRunListeners listeners, ApplicationArguments applicationArguments) { // Create and configure the environment ConfigurableEnvironment environme
2020-08-31 10:02:57
778
4
原创 【Spring Boot 三】SpringBoot中事件与通知
前言在SpringBoot启动过程中,有下面两行代码 SpringApplicationRunListeners listeners = getRunListeners(args); listeners.starting();简单概括来说,他的作用是:通过spring.factories文件中找到所有需要被实例化的SpringApplicationRunListener的实现类;并将其实例化,然后执行starting方法; 在SpringBoot中这个实现类只有EventPublishin
2020-08-19 14:55:56
652
原创 【SpringBoot 二】spring.factories加载时机分析
spring.factories作用这个类似于Java中的SPI功能,SpringBoot启动的时候会读取所有jar包下面的META-INF/spring.factories文件; 并且将文件中的 接口/抽象类 对应的实现类都对应起来,并在需要的时候可以实例化对应的实现类下面我们来分析一下源码看看spring.factories的使用场景源码解析启动SpringApplication,看看构造方法 public SpringApplication(ResourceLoader resour
2020-08-18 20:04:56
928
原创 【SpringBoot 一】SpringApplication启动类的Args详解
Args 作用传递参数的一种方式; 例如启动的时候 java -jar --spring.profiles.active=prod或者更改自己的自定义配置信息 ;使用方式是 --key=value它的信息优先于项目里面的配置;我们现在大部分项目都是用SpringBoot进行开发的,一般启动类的格式是SpringApplication.run(SpringBootDemoPropertiesApplication.class, args);但是好像平常一直也没有用到args; 也没有穿过参数
2020-08-18 20:03:05
1248
原创 【Seata】分布式事务框架Seata踩坑集锦
no available service ‘default’ foundcom.alibaba.nacos.api.exception.NacosExceptionNotSupportYetException: not support register type: null can not register RM,err:can not connect to services-server.Could not initialize class io.seata.rm.datasource.undo.
2020-06-21 17:29:26
13316
2
原创 【Dubbo源码】SPI机制源码解析
文章目录一、什么是SPI机制二、SPI机制源码分析ExtensionLoader静态类和静态方法new ExtensionLoader(type) 实例化扩展加载器如何创建自适应扩展实例如何获取自适应扩展的`Class`?如何自动创建`自适应扩展类`实例化之后,如何依赖注入?依赖注入的属性从哪里来加载当前`Type`中所有的扩展类加载文件中的具体实现类@Activate 注解的作用总结先去看Du...
2019-12-01 18:17:32
3958
1
原创 Zookeeper安装与基础命令操作
安装ZK下载安装包点击下载zookeeper 3.4.14PS: Mac之前下载了3.5.6启动之后,报错找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain应该是lib下的jar包缺失,省的麻烦,我就直接下载了3.4.14版本启动ZkServer执行zk的bin下面的启动脚本;例如sh ~/Documents...
2019-11-11 19:10:21
156
原创 Aop实现记录请求日志
/** * @ClassName: LogAspect * @Description: 日志记录AOP实现 */@Component@Aspectpublic class LogAspect { private final static Logger logger = LoggerFactory.getLogger(LogAspect.class); @Pointcut...
2019-11-10 11:14:10
187
原创 初始Java诊断工具-Arthas
Arthas(读:阿尔萨斯) 是什么Arthas 是Alibaba开源的Java诊断工具Arthas能干什么当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:...
2019-09-20 11:39:46
14
原创 【Arthas】通过Cloud Toolkit插件使用Arthas一键诊断远程服务器
Cloud Toolkit是一个IDE 插件,帮助开发者更高效地开发、测试、诊断并部署应用。
2019-09-20 10:10:34
1279
原创 【Arthas】命令之ognl使用姿势
文章目录Althas中的OGNL使用姿势参数说明使用示例1.调用静态属性2.调用静态方法3.读取不同类型的值Ognl 常用用法说明`#`变量引用 `#this` 当前对象调用构造方法参考资料Althas中的OGNL使用姿势从3.0.5版本增加Althas支持ognl的格式参数说明参数名称参数说明express执行的表达式[c:]执行表达式的 ClassL...
2019-09-19 20:28:35
8253
1
原创 【Nacos源码之配置管理 十一】服务端推送变更数据到客户端
前言上一篇【Nacos源码之配置管理 十】客户端长轮询监听服务端变更数据介绍了客户端会像服务端发起长轮询来获取变更数据, 其实在客户端发起长轮询的请求相当于向服务端发...
2019-09-14 12:34:40
60
原创 【Nacos源码之配置管理 十一】服务端LongPollingService推送变更数据到客户端
前言上一篇 【Nacos源码之配置管理 十】客户端长轮询监听服务端变更数据 介绍了客户端会像服务端发起长轮询来获取变更数据, 其实在客户端发起长轮询的请求相当于向服务端发起了一个订阅; 因为服务端接受到客户端的请求之后如果没有查询到变更数据是不会返回的;而是会等待29.5s(当然时间可配),在这个29.5s时间内,服务端如果检测到有数据变更,会立马像客户端发起响应请求,因为这个时间内服务端还是...
2019-09-14 11:48:22
4970
1
原创 AsyncContext异步请求的用法
AsyncContext介绍Servlet 3.0的异步处理支持特性,使Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度Servlet 3.0新增...
2019-09-13 20:31:45
1238
原创 【Nacos源码之配置管理 十】客户端长轮询监听服务端变更数据
前言还记得我们在 服务端增删改配置数据之后如何通知集群中的其他机器 中分析了服务端之间的相互通知修改数据, 当时结尾的时候,留下了以下问题,我们将在这篇文章中来给解析一下; 客户端是如何订阅服务端的? 服务端又是怎么通知到客户端数据变更的? 客户端与服务端直接是长连接还是短连接? 客户端与服务端是推还是拉?ConfigService.addListener 订阅配置消息在【N...
2019-09-12 16:34:33
7366
8
原创 【Nacos源码之配置管理 九】客户端获取配置数据的流程
前言上一篇文章讲了 【Nacos源码之配置管理 八】客户端怎么获取服务端集群列表 ,客户端获取到集群列表缓存在内存中,是在获取配置的时候需要使用的; 因为要去服务端发起http请求获取数据; 那么我们今天来分析一下,客户端是如何获取服务端数据的阅读完本文,您将会了解以下问题: 客户端如何获取配置数据 客户端如何配置本地配置数据(开发的时候,开发者可以配置自己的配置数据) 如果服务端全...
2019-09-09 11:01:07
6672
9
SpringMVC4.0+MYBATIS3.0
2014-11-23
JAVA实现GAME2048
2014-07-25
java基础 继承和多态实例
2014-07-16
Centos 7环境开发者环境初始化脚本
2018-12-26
ffmpeg for Linux
2018-12-21
MAC 的 ffmpeg
2018-12-21
dubbo官方文档
2018-05-30
SpringMVC+FREEMARK+Redis
2016-10-26
eclipse svn 插件下载
2015-08-21
Netty 当作websocket 怎么接入wss呢?
发表于 2017-04-09 最后回复 2019-09-02
关于委托问题
发表于 2013-05-15 最后回复 2017-04-09
OAUTH2.0授权登陆怎么保持登陆状态
2016-11-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝