二、SpringBoot 整合 Dubbo 进阶,Provider 不使用 web 容器启动

2021-03-12
阅读 10 分钟
3.2k
demo github 地址0、docker 启动 zkdocker-compose.yml {代码...} {代码...} 1、创建父 pom {代码...} 2、创建 API maven 工程 {代码...} 3、创建 Provider maven 工程pom.xml {代码...} dubbo-provider.properties {代码...} log4j.properties {代码...} Application {代码...} TestApiServiceImpl {代码...} 4、创建 P...
封面图

一、SpringBoot 整合 Dubbo 光速入门

2021-03-12
阅读 6 分钟
3k
0、docker 启动 zkdocker-compose.yml {代码...} {代码...} 1、创建父 pom {代码...} 2、创建 api maven 工程 {代码...} 3、创建服务提供者Application {代码...} TestApiServiceImpl {代码...} application.properties {代码...} 4、创建消费者Application {代码...} TestController {代码...} application.properties ...
封面图

Redis 持久化之 rdb

2021-03-07
阅读 2 分钟
2.9k
1、rdb 解决了什么问题?rdb 是 redis 持久化其中的一种方案,通过快照的方式,可将内存的数据 dump 到磁盘上。2、如何使用 rdb2.1、save 与 bgsave当客户端执行 save or bgsave 时, 服务端会将当前内存中的数据 dump 到文件上。save 会拒绝客户端所有的命令,直到服务端执行完 save 后,才能响应客户端命令。bgsave 命...
封面图

JVM - OOM

2021-01-01
阅读 3 分钟
2.3k
既然选择了远方,即使天寒地冻,路遥马亡,我本就一无所有,又有何惧。OOM(内存溢出)是一个让人很头疼的问题,出现 OOM 的问题有很多,下面就 OOM 可能出现的原因进行介绍。1、堆空间太小用以下参数启动 jvm -Xms20m -Xmx20m {代码...} 最大堆、初始化堆均为 20m,程序创建了 30m 的数组,直接 OOM。 {代码...} 1.1、...

JVM - 垃圾回收器概述

2020-12-26
阅读 3 分钟
1.2k
[toc]既然选择了远方,即使天寒地冻,路遥马亡,我本就一无所有,又有何惧。串行收集器单线程、独占式进行垃圾回收独占式:应用程序线程会停止工作,只有垃圾回收线程在工作,即 stop the world。在并行能力较差的机器上,会有更好的性能表现。新生代串行收集器新生代串行收集器使用的是 复制算法使用 -XX:UseSerialGC, ...

JVM - 垃圾回收算法概述

2020-12-21
阅读 2 分钟
1.1k
[toc]既然选择了远方,即使天寒地冻,路遥马亡,我本就一无所有,又有何惧。标记清除法标记清除算法工作分为 2 个阶段。第一个阶段,先根据 GC Root 标记 可达对象第二阶段,将不可达对象,直接清除。算法缺点:会产生大量的内存碎片工作原理如下图所示:复制算法复制算法思想:将内存一分为二,每次只使用其中一块。发...

JVM - 垃圾回收概述

2020-12-16
阅读 6 分钟
1.9k
引用计数法是用于判断对象是垃圾的一种方式。如果被其他对象引用,那么对象的引用计数就会+1。当引用失效时,引用计数就-1。当引用等于0时,即表示对象已无用。引用计数虽然实现简单,但是无法处理循环引用的问题,也因此没有被采用。

Java 注释规范

2020-12-10
阅读 3 分钟
1.2k
好的注释往往能减少提供协同开发的工作效率,以及极大的提升系统的可维护性。因此写好代码注释也是一个很重要的事情。Javadoc 一般分为三段:

JMH -- JAVA 微基准测试工具套件

2020-12-08
阅读 4 分钟
2.3k
1、概览2、jmh 简介3、jmh 使用demo4、jmh 常用设置介绍5、注意事项你的努力,终将成就无可替代的自己将来的你一定会感谢现在拼命的自己1、概览在日常开发中,我们往往需要优化我们自己写的代码。优化后的代码,执行效率是否比之前的还高?具体高多少?这些都是需要去测量。目前比较主流的做法是使用 jmh 进行微基准测试...

重温 JAVA -- ThreadLocal 终

2020-11-08
阅读 4 分钟
1.7k
ThreadLocal 是什么作用ThreadLocal 用于存储线程间的私有变量数据结构内存泄露?要解释这个问题之前,需要先看 JAVA 对象中的 强引用、软引用、弱引用、虚引用对象的四种引用类型强引用new 或通过反射创建出来的对象被称为强引用,只要强引用还存在,就不会被垃圾回收软引用使用 SoftReference 修饰的对象被称为软引用...

重温 JAVA -- 阻塞队列 终

2020-11-03
阅读 2 分钟
1.2k
BlockingQueueBlockingQueue 接口定义了很多插入和删除的方法,这里总结梳理如下:添加容器满了,抛异常add(e)返回是否成功offer(e)容器满了,阻塞put(e)容器满了,等待超时退出offer(e, time, unit)删除容器没有元素,抛异常remove()返回是否成功remove(obj)poll()容器没有元素,阻塞take()容器没有元素,等待超时退出p...

重温 JAVA -- synchronized 终

2020-10-27
阅读 5 分钟
1.2k
synchronized 关键字用于实现多线程之间的同步操作。synchronized 可用于修饰 类方法, 对象方法, 代码块使用 syncronized 时,需要有监视器。当修饰 类方法时, 监视器为该类; 当修饰 对象方法, 监视器为该对象; 当修饰 代码块, 需要手动传入监视器

重温 JAVA -- AQS 终

2020-10-22
阅读 3 分钟
960
当 AQS 在尝试获取锁失败时,会将当前线程构造成 Node 节点,插入同步队列中。在说入队列操作之前,需要对 Node 的数据结构进行一下说明

kafka 系列 -- 7.2、日志索引

2020-10-10
阅读 2 分钟
2.5k
kafka 的索引文件以稀疏索引的方式构造消息的索引,每个 segmentfault 文件,对应 2 个索引文件。偏移量索引文件(xx.index)用于建立消息偏移量到物理地址之间的映射关系;时间戳索引文件(xx.timeindex)根据指定的时间戳查找对应的偏移量信息。

kafka 系列 -- 7.1、日志存储

2020-10-10
阅读 2 分钟
1.6k
1、日志文件布局__consumer_offset 存储着消费者提交的消费位移2、日志存储格式V0消息格式offset:每一条消息都有一个 offset 用来标志它在分区中的偏移量,offset 是逻辑值,而非实际物理偏移量message_size:表示消息的大小crc32(4B):crc32 校验值。校验范围为 magic 至 value 之间magic(1B):消息格式版本号,V0 固定为 ...

kafka 系列 -- 5.1、分区管理

2020-08-23
阅读 3 分钟
3.4k
现,我们将 brokerId 2 的机器重启,kafka 会从 Isr 副本中选出一个新的节点作为 leader, brokerId 为 2 的机器重启后,只能作为 follower

kafka 系列 -- 4.2、消费者分区策略

2020-08-22
阅读 2 分钟
3.2k
kafka 允许通过配置 partition.assignment.strategy 来改变消费组的分区策略。kafka 提供了以下几个分区策略

kafka 系列 -- 4.1、消费者基本介绍

2020-08-20
阅读 8 分钟
2k
topic 为逻辑上的概念,partition 才是物理上的概念。那么看完这个以上的消费模型图。你可能会很疑惑。当一个组下有多个消费者时,每个消费者是如何消费的?

springcloud 系列 -- 初识 zuul

2020-08-12
阅读 9 分钟
1.9k
Zuul 的上下文,继承 ConcurrentHashMap。内置 ThreadLocal 变量。因此每个线程都会有自己的 RequestContext 变量

kafka 系列 -- 3.2、生产者客户端原理分析

2020-08-09
阅读 11 分钟
2k
RecordAccumulator 主要用于缓存消息,以便 Sender 线程能够批量发送消息。RecordAccumulator 会将消息放入缓存 BufferPool(实际上就是 ByteBuffer) 中。BufferPool 默认最大为 33554432B,即 32MB, 可通过 buffer.memory 进行配置。当生产者生产消息的速度大于 sender 线程的发送速度,那么 send 方法就会阻塞。默认...

kafka 系列 -- 3.1、生产者客户端基本使用

2020-08-05
阅读 2 分钟
1.3k
该参数为 broker 地址,不需要全部都填,因为 kafka 会从当前 broker 中获取其他 broker 信息。不过为了某个 broker 挂掉,一般填多个 broker 地址

kafka 系列 -- 2、搭建与实践

2020-07-19
阅读 4 分钟
2.6k
前言动手实践往往比看看更重要😇单机版 Docker 搭建 {代码...} 注意事项:如果想要 java 客户端能够正常连接上 kafka, 需要配置宿主机的 host {代码...} 如何使用 kafka 自带的 kafka-console-producer 测试发送消息? {代码...} 集群版 + kafka managerkafka 集群 docker-compose {代码...} 注意事项:如果想要 java 客...

kafka 系列 -- 1、基本概念

2020-07-12
阅读 2 分钟
1.4k
前言 思考的过程往往比直接得到结论更加重要 kafka 应用场景 应用监控 网站用户行为追踪 流数据 持久性日志 基本概念 在说基本概念前,先看一下 kafka 的系统架构 Broker 一般而言,一台机器就是一个 broker,当然 1 台机器上可以部署多个 broker Producer 消息的生产者 Consumer 消息的消费者 Consumer Group 消费者组...

springcloud 系列 -- 了解一下 OpenFeign

2020-06-25
阅读 2 分钟
1.9k
对于 Feign,无疑就是整合了 Ribbon + Hystrix,然后封装为对开发使用起来更加友好的 jar。因此本质上,Feign 是 Ribbon + Hystrix. 因此,在学习 Feign 之前,建议先把 Ribbon, Hystrix 学习一下。

springcloud 系列 -- 简单了解一下 Hystrix

2020-06-07
阅读 3 分钟
1.4k
在分布式环境下,不可避免的就是服务之间的调用。A 调 B,B 可能会失败,如果此时 B 服务挂掉,那么会导致服务 A 因为服务 B 的失败而失败。从而导致 客户端认为 A 也是失败的。 简单说就是,牵一发而动全身

springcloud 系列-- 三言两语,带你认识 ribbon

2020-05-31
阅读 4 分钟
1.5k
前言 ribbon 作为一个负载均衡组件,个人认为,其核心的功能就是提供多种负载均衡策略。 暂停思考一下,如果让你自己写负载均衡组件,要如何做? 获取有多少合适的服务可供负载 服务有时候可能会不可用,那么需要更新维护服务,及时将不合理的服务剔除 提供策略判断服务是否可用 实现多种负载算法,供用户选择 负载失败...

rocketMQ(4.6.1) 系列教程 -- 提炼篇

2020-05-26
阅读 5 分钟
2.5k
broker 每隔 30s 会向 namesrv 注册自身的信息。namesrv 每隔 10s 检查 120s 内 无响应的 broker, 并进行剔除。

springcloud 系列--用几张图,带你了解 eureka-server

2020-05-04
阅读 6 分钟
2k
不建议为了看源码而看源码,这样做无意义!其次,有时候了解工作机制即可,不一定得深入源码的每一个细节。更多的时候,看源码,只是工作需要。因此,源码分析,不会贴大量的源码,而只是给了流程 + 代码入口。看源码的工作,还是得自己去看。

RocketMQ(4.6.1)系列教程--消息消费篇

2020-04-25
阅读 30 分钟
7.2k
集群模式下,主题下的同一消息只允许被消费组内的一个消费者消费,消费进度存储在 broker 端。广播模式下,则每个消费者都可以消费该消息,消费进度存储在消费者端。

springcloud 系列--用几张图,带你了解 eureka-client

2020-04-19
阅读 2 分钟
1.5k
springcloud 通过 SPI 技术加载 spring.factories 文件中定义好的Bean。其中 EurekaClientAutoConfiguration 装入了 EurekaClient。 一个 EurekaClient 代表的就是我们的客户端,也是我们主要需要关心的对象。