王鸿飞的专栏

博客迁移至简书: https://www.jianshu.com/u/5267bcbeb04d CSDN也会同步更新

使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务

在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client, Spring的Rest...

2016-09-06 14:50:02

阅读数 121213

评论数 45

Filebeat实时日志监控最佳配置

在使用filebeat监控日志文件时,如果不会做任何配置的话你可能会发现一些奇怪的问题,即有时新的日志行会马上发送到目标输出地,有时候却要延迟近10s才会被发送。要解决这个问题,首先要明确filebeat中几个组件的作用和几个重要的参数的含意,如下: Input组件 input组件负责监控日志文...

2019-02-20 11:38:25

阅读数 18

评论数 0

Filebeat + ES + Kibana日志解析痛点解决

使用Filebeat + ES + Kibina的组合进行日志收集的一个优点就是轻量级,因为去掉了笨重的logstash, 占用资源更少。但这也引入了一个问题,即filebeat并没有logstash那样强大的日志解析能力,往往只能把整条日志当成一个整体扔到ES中。好消息是,ES从5.x版本开始引...

2019-02-19 17:25:48

阅读数 13

评论数 1

从Go语言实现模板设计模式浅谈Go的抽象能力

首先抛出一个观点,那就是Go的抽象能力的确不如Java这种严格的OOP语言强。具体表现之一就是模板模式的实现。 模板的实现 模板模式是OOP编程中的一把神兵利器,用好了能够提高代码的复用程度,大大提高开发效率。例如,我们可以在父类中定义完成一个任务的几个步骤并分别给出一个默认实现,然后子类继承父类...

2018-11-25 03:08:46

阅读数 88

评论数 0

如何裸写或利用Spring扫描出指定包下的所有类名

在很多Java框架中都有组件扫描功能,即给出一个注解,框架能够把所有标注了此注解的类找出来。这种操作的本质是给出一个名包,能获取到此包下的所有类名,然后再通过反射判断是否加了指定的注解。无论是什么框架,包括Spring, 完成这个功能底层都是用的ClassLoader.getResources()...

2018-09-30 16:16:55

阅读数 1003

评论数 0

Java异常(exception)性能优化

在Java中,构造异常对象是”十分”耗时的,其原因是在默认情况下,创建异常对象时会调用父类Throwable的fillInStackTrace()方法生成栈追踪信息,JDK中的源码如下: public synchronized Throwable fillInStackTrace() { ...

2018-09-11 15:42:48

阅读数 578

评论数 0

@FeignClient同一个name使用多个配置类的解决方案

Feign有一个局限性,即对于同一个service-id只能使用一个配置类,如果有多个@FeignClient注解使用了相同的name属性,则注解的configuration参数会被覆盖。至于谁覆盖谁要看Spring容器初始化Bean的顺序。 这个问题的有效解决方案是,当你需要给一个servic...

2018-09-03 15:32:27

阅读数 1376

评论数 0

Go FastHttp优雅关闭实现方案

使用Go开发web服务时很多情况下都会使用号称比标准库快10x的FastHttp, 但fasthttp(版本: 20180529.0.0)至今也没有提供优雅关闭的方法,默认情况下退出服务只能kill。下面谈几个实现方案。 首先,要明确所谓的优雅关闭是要求我们在调用close()时要做到以下几点:...

2018-07-31 14:52:22

阅读数 612

评论数 0

Spring事务隔离级别与Mysql InnoDB事务隔离级别的关系

这里不再重复READ_UNCOMMITTED, READ_COMMITTED, REAPEATED_READ, SERIALIZABLE这几种标准事务隔离级别的关系,网上资料一大把。很多朋友可能会有疑惑,如果Spring事务可以设置隔离级别,而数据库也可以设置默认隔离级别,那他们到底是怎样的关系呢...

2018-07-11 15:47:04

阅读数 259

评论数 0

JEP 333: 一个可伸缩的低延迟垃圾收集器

译者:王鸿飞 摘要 Z垃圾收回器,也被称为 ZGC, 是一种可伸缩的低延迟垃圾收集器。 目标 垃圾回收停顿时间不超过10ms 无论是相对小的堆(几百MB)还是大堆(TB级)都能应对自如 与G1相比,吞吐量下降不超过15% 方便日后在此基础上实现新的gc特性、利用colored p...

2018-06-25 20:13:39

阅读数 329

评论数 0

Spring Cloud: 使用kill命令优雅关闭微服务, 解决退出时Eureka取消注册操作耗时过长的坑

关于Spring Cloud服务优雅关闭的方案有很多种了,这里介绍一下使用kill命令优雅关闭的方案,并解决会出现的问题。 所谓的优雅指两方面,一是程序在退出时要主动向Eureka取消注册自己,二是完成资源清理工作。比如我的程序里用到了线程池来异步执行一些任务,如果退出时不做清理,那么就有异步任...

2018-05-23 11:40:52

阅读数 3052

评论数 7

SpringBoot 2.0 web应用无日志输出问题

如果你使用springboot 2.0或以上版本,当依赖中包含commons-logging时,程序会出现貌似无法启动的问题,表现为控制台没有输出xxx started。其实这时候程序是正常启动的,功能正常,只是没日志输出而已。解决方法为找出引入commons-logging的依赖,排除即可。 ...

2018-05-04 17:13:17

阅读数 2715

评论数 0

Hyperledger fabric: 使用dev模式调试链码(chaincode)

fabric的链码开发是比较痛苦的,主要是调试起来特别繁琐。在不使用dev模式的情况下,写好chaincode之后不能在本地测试,必须将代码部署到docker, 然后再install,instantiate,这样peer节点会在新的容器中启动你的chaincode。更可怕的是,你只能通过docke...

2018-04-20 16:33:39

阅读数 1437

评论数 0

Java应用CPU占用率高的问题排查(spring-kafka 1.1.7版本的bug)

近期项目中使用到了spring-kafka-1.1.7.RELEASE, 上线后发现程序在没有请求时,进程的CPU占用率依然保持在20%以上,于是开始查找原因。 首先通过ps -mp命令查看到低是哪个线程长时间占用CPU: ps -mp 进程PID -o THREAD,tid,time ...

2018-03-19 17:33:46

阅读数 1475

评论数 0

Go语言: 万物皆异步

同步和异步、堵塞和非堵塞首先要明确的是,同步(Synchronous)和异步(Asynchronous),堵塞(Blocking)和非堵塞(Non-Blocking)是两种完全不同的概念。前者指的是一种事件通知、处理机制,而后者则是程序控制流程的差异。我们以A调用B为例来说明两者之间的区别: -...

2017-12-24 11:31:09

阅读数 1110

评论数 0

Filebeat如何保证在日志文件被切割(或滚动rolling)时依然正确读取文件

我们的日志收集系统使用Filebeat来收集日志文件,部署时并没有多想,只配置了一下监控的日志文件名。上线几个月,日志监控从没出过问题。后来想想其实这里面有很多点需要考虑的,没出问题真是感谢Filebeat默认配置下想的就很周全。业务系统使用logback作为日志框架。通过查看源码,发现logba...

2017-12-18 12:13:18

阅读数 3388

评论数 0

程序员与公司政治

每家公司都有政治。如果你没感觉到,说明你目前还只是个写代码的工具。 员工分两种,普通员工与核心员工。前者只是干活干活再干活,而后者会掌握很多“小道消息”,如哪位领导要离职、哪个项目快死了、某人是哪个领导 “宠儿”等等。 两个同事表面上在一起共事,但背后极可能因为分别投靠了不同的领导而属于不同的利益...

2017-12-18 01:52:37

阅读数 731

评论数 3

Spark Streaming: 保存上一个批次数据的计算结果

在Spark Streaming计算模型下,有时候我们对当前 batch 数据的计算需要依赖上一个 batch 的计算结果,如广告系统中检索日志和曝光时间的join拼接。这时可以使用JavaStreamingContext#remember()方法完成。该方法需要一个时间参数,用来指定要”记住”多...

2017-12-08 19:25:41

阅读数 2550

评论数 3

MySQL Binlog监听服务延迟问题排查

问题现象线上部署了一个binlog监听服务,将自己伪装成从库,通过网络监听主库发来的row based binlog事件来进行一些业务上的处理。此前一直监听的是mysql A集群,一切正常;现在切换成B后,发现监听进度总是会落后,且平均每天落后1小时(当前发生的事件要到下一小时才能监听到)。通过观...

2017-12-01 15:01:20

阅读数 757

评论数 0

【leetcode】通过递归反转单链表 - Go语言实现

问题描述见leetcode第206题:https://leetcode.com/problems/reverse-linked-list/#/description思路使用迭代的方式反转链表大家已经很熟了,其实递归调用栈的特性,我们也可以轻松做到链表反转。 链表反转后,原链表的最后一个结点,会变...

2017-05-07 11:08:14

阅读数 1638

评论数 0

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