自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 问答 (2)
  • 收藏
  • 关注

原创 Spring Boot应用自动配置Kafka过程解析

​最近工作需要集成kakfa到应用中,应用的主体框架使用Spring Boot,因此研究了下Kafka在Spring Boot中的集成方案。1. 依赖引入spring-kafka包,版本号由Spring Boot自动管理。<dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><...

2021-02-03 14:08:23 1794 1

原创 spring-kafka-test大揭秘

​已经到了没有测试案例,就不会写代码的年纪了!不过好在,优秀的框架或组件总是会在介绍完主体功能之后,附带介绍如何进行测试。然后,因为工作原因,又简单研究了下kafka的测试框架。其中,最神奇的地方是,Spring团队为了便于测试,秉持着能内嵌一定内嵌的原则,搞了一套内嵌的zookeeper和kafka。这样在单元测试期间,就不用开发人员再准备相关环境了。那么,下面来揭秘下具体是如何实现的:1. 依赖<dependency><groupId>org.spri...

2021-02-03 14:07:27 2654 1

原创 CAT、Kafka 以及 Apollo

微服务架构下,常见的一些基础组件的配置问题1. CATCAT 是大众点评开发的一套监控数据打点的系统,主要就是将CAT客户端集成到应用中,然后由应用异步上报系统内部服务的执行情况。​CAT本身是异步的,同时作为一个应用打点系统,需要保证无论CAT是死是活都不能影响到宿主应用。实际开发过程中,确实对应用来讲没啥影响。即使是CAT挂了,应用也照样能正常运行。但这有时候,对开发人员也头疼,尤其是想要验证自己打点逻辑对不对时,经常发现在CAT上找不到自己上报的数据!CAT是通过一个名叫client.

2021-02-03 14:06:18 769

原创 从application.properties中反向注册参数到环境变量中

​今天遇到一个情况,比如:2021-01-0711:43:01,367WARN(Configuration.java:283)-Formoredetails,gotohttps://vladmihalcea.com/hypersistence-optimizer/2021-01-0711:43:01,368INFO(Configuration.java:285)-____||||...

2021-02-03 14:05:28 479

原创 填一下上篇《本地开发环境整合》的坑

​嗯,我昨天发的那篇关于本地开发环境整理的文章,我承认是一篇挖坑文。因为,如果有人真的按照我的方式原样不动地照做的话,十有八九本地是跑不起来的。不是因为做的不对,而是因为本来整个过程就有不少需要优化的地方(手动狗头^.^)。但是,思路和方向是对的!所以,我今天在公司除了参加了一个会议之外,啥都没做,依旧在整理我本地的开发环境!另外,我要坦白的是:让我下定决心以打包镜像的方式配置开发依赖组件的根本原因,不是因为本地开发环境性能撑不住了(4 Core/16GB的MacBook Pro还是可以一战的!

2021-02-03 14:04:31 370

原创 本地开发环境整合

​最近因为日常的开发工作,导致在本地电脑上安装了过多的和开发相关的组件。在某些场景下,当把所有的功能都打开时,电脑直接卡成幻灯片,极度影响办公效率。现在刚好有时间,准备将本地环境整理整理。本地机器上目前和开发相关的服务有: MySQL数据库 Kafka集群 Consul服务 Apollo服务(这个不重要) 计划将这些服务打成一个镜像,按照实际需要启动或者停止相关功能。1. 准备工作首先,找一个基础镜像包。由于我们大部分应用还是基于jdk的,所以使用jdk的

2021-02-03 14:03:35 560

原创 一道感觉没啥难度的面试笔试题

​上次和波波聊天,说到面试的编程题的问题,他提到google有一个经典的面试题:将二叉树左右子树颠倒。然后我有一次面试就让一个候选人写一下,结果他竟然直接放弃了!这题目其实挺简单的: 首先写一个类,用来封装我们的代码: /***@authorjingxuan*@date2021/1/118:09下午*/publicclassMirrorReverse{publicstaticvoidmain(String[]args){}}...

2021-02-03 14:02:29 159

原创 TCP建立连接/断开连接的知识工作中真的用不到吗?

​关于TCP连接的建立和释放过程的问题,已经快变成现在互联网公司面试必问的题目了。不过很多时候,大部分人都觉得这只是书本上的知识。实际工作中怎么可能用到呢?网络连接协议这么底层的东西,写代码的时候会用不就好了?然后我今天还真的遇到了一个问题,下面就开始了!首先,公司使用了consul作为服务注册组件。众所周知,consul的默认端口是8500。由于我在应用中编写了很多的测试案例,有部分测试案例是和consul的实例化过程密切相关的。consul环境公司有提供测试环境,但考虑到本地测试的顺畅性

2021-02-03 14:01:24 194

原创 Java语言中Method Reference操作的一个坑

我,又遇到了一个深坑!众所周知,在Java 8中,Java语言增加了lambda表达式,用于支持函数式编程。与此同时,Java中也增加了一个名为Method Reference的方法,即::。因此,我们有了如下的写法:publicstaticvoidmain(String[]args){String[]str={"Hello","World","Is","Beautiful"};Arrays.stream(str).forEach(System.out...

2021-02-02 18:22:18 530

原创 EFK上因双引号未转义导致日志丢失问题

​最近查阅生产环境日志后发现,有部分日志在Kibana上查询不到,所以登录到POD上检查了下,发现日志内容是这样的:{"app":"insight","prdline":"risk-insight","timestamp":"2021-01-1410:46:22","log_level":"INFO","msg":"ServiceCallrequest[XXXX(userId:***,score:0,level:0,bas...

2021-02-02 18:21:23 586 2

原创 Java的垃圾回收啊,哎...

​最近设计开发的系统本周正式生产上线了。这周的主要工作除了完成整个链路打通之外,其他时间都花在生产系统的细节调教上了。比如分布式环境下一致性的问题该怎么解决(基本没得解决);再比如昵称中各种诡异的特殊符号导致的异常等等。目前系统运行的情况大概这样:QPS在2000左右,正常压测时200K的QPS基本表现正常,枫哥说理论的设计上限大概在500K左右,所以现在的QPS基本是毛毛雨。响应时间上,当时期望是压缩到2ms以内,但实际现在看起来稳定在2ms左右了,有一定差距但基本也还能用,整体上比较正常

2021-02-02 18:20:38 718

原创 想要学习携程的Apollo框架?这篇绝对够了!

​最近的工作,需要基于Apollo做一套可以支持实时修改系统配置信息的参数校验框架。Apollo的源码不久前曾经研究过,不过那时候写的笔记不知道放到哪了。因此,今天写篇文章,记录下Apollo的源码和相关核心逻辑。1. 依赖包引入<dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>red-apollo-client</artifactI...

2021-02-02 13:56:00 1362

原创 拯救在抛出NPE和null值判断间犹豫不前的你

​有个问题不知道有没有困扰过大家,比如下面这段代码:@OverridepublicUserPropertyEntityconvert(Stringmessage)throwsMessageConversionException{try{Map<String,Object>data=DefaultJsonUtils.deserialize(message);if(data==null){...

2021-02-02 13:54:26 268

原创 一个好几天都没有想明白的问题,日志乱序了

今天发现一个非常奇怪的现象,这里记录下。上面这张图是同一个实例的同一个线程打印的三行日志,按照时间从近到远排序。​17:30:09.687和17:30:09.672是同一个方法中的两行日志,但是17:30:09.676这条日志是接口调用的入口日志。按照正常逻辑来讲,Netty在工作线程没有执行完成之前,不应该会再分配请求给该线程,这也不符合JAVA线程的底层逻辑。所以中间17:30:09.676这条日志就很奇怪了。为了确认是否有可能是日志打印出现乱序,对生产环境的日志配置文件排查了下

2021-02-02 13:53:34 1706 2

原创 冷门知识:Spring框架中的两个偏序关系

​1. AutoConfiguration的偏序逻辑在Spring Boot中,一般会通过org.springframework.boot.autoconfigure.EnableAutoConfiguration配置很多用于自动配置的配置类。比如在autoconfigure包中的下面这个配置文件:另外,在配置类中还会使用@ConditionalOnBean对配置类的启动增加条件控制,比如下面这种:@Configuration@ConditionalOnClass({JdbcTem.

2021-02-02 13:52:35 304

原创 深入浅出actuator框架?

如果看过我最近发的博文的读者应该大概知道,我最近在做一套基于Apollo的数据写入schema校验的框架。框架本身的结构和逻辑等后面看是否有机会可以单独写篇文章介绍,总体逻辑是基于Apollo源码做了深度的集成。不过,现在的互联网应用基本要求都是不停机维护。这其实对企业服务治理能力提出了很高的要求。​关于服务治理,其实也是微服务架构的一个核心话题。没有强力的服务治理能力,强行转型微服务架构,带来的破坏性甚至会超过早期的预想!既然要不停机维护,那必然需要应用时时刻刻可以将自己的运行状态记录下来

2021-02-02 13:51:36 1325 1

原创 如何调试(debug)maven插件

我在自己的项目中引入了 MapStruct【https://mapstruct.org/】用于完成对象间映射转换。MapStruct框架的作用不过多解释了,想要了解的可以看下它的官网介绍。主要作用就是可以通过配置,定义对象和对象之间的映射,减轻编码负担。MapStruct性能很高。之所以快,是因为它没有用反射。之所以能不用反射,是因为它是在程序编译期间,直接生成了对象转换的类文件。这段比较抽象,但用过lombok的话就好理解了。它和lombok很相似,主要工作是在编译期完成,不是运行时。1.

2021-02-02 13:49:13 2248

空空如也

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

TA关注的人

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