自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Lovnx

木秀于林,风必摧之;堆高于岸,流必湍之;行高于众,人必非之。

  • 博客(167)
  • 资源 (6)
  • 论坛 (1)
  • 问答 (3)
  • 收藏
  • 关注

原创 reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE response解决方案

一、背景可能大家在使用Spring Cloud Gateway构建微服务网关的时候,过五关斩六将,Reactor没能难倒我们,链路追踪没能难倒我们,最后在上线之后发现许多奇妙的问题,这些奇妙的问题还无从下手,比如这个堆栈,深入使用过SCG的人一定不会陌生:reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE responseSuppressed: reactor.core.publ

2020-08-09 22:50:40 6902 7

原创 使用Camtasia录制视频(MAC版)

1. 选择new project2. 在打开的项目界面左上角,点击红色圆圈开头的Record3. 确保弹出窗口的第一、三、四小窗下面按钮均为打开状态,如下图,如果有一项未打开可能需要安装插件4. 点击上图的Start Recording,界面出现倒计时,倒计时结束就正式开始录制5. 可以使用快捷键,也可以在最上方找到Camtasia停止录制,如图所示也可以暂停6. 录制完成后,将出现如下界面,可以自行播放、剪辑7. 导出MP4,再界面右上角有Share按钮,点击后再选择下拉中的 Lo

2020-05-11 21:04:17 317 1

原创 新书推荐 | 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)

Java自上世界90年代面世以来,以其优良的特性,逐渐占据了企业级开发的主流位置,并且日益强大的语言生态,更加巩固了它在编程语言排行榜上的地位。Java的快速发展,得益于支撑它运行的底层平台:JVM,这个由C++编写的虚拟机,有着一个抽象化的虚拟机内部的抽象体系结构,让我们的Java程序得以“一次编写,到处运行”,并且开发人员并不需要关心资源问题,JVM为我们独挑大梁。但是,正如周志明老师在《...

2019-12-12 10:35:42 3881

原创 使用Nacos实现Spring Cloud Zuul的动态路由

一.前言Nacos是阿里巴巴开源的致力于服务发现与管理、动态配置管理,以及动态DNS服务的中间件,目前已发布至0.5.0版本,除了与Spring Cloud更加紧密结合以外,还丧心病狂地支持JDK11。如果您目前的项目碍于Eureka的性能,而又缺乏成本引进Consul,那么Nacos是您最好的选择。好了,回到正题,在上周许进搞了一个使用Nacos实现Spring Cloud Gateway的动...

2018-11-29 00:50:21 10525 4

原创 《重新定义Spring Cloud实战》

---- Spring Cloud中国社区(http://springcloud.cn)是国内首个基于Spring Cloud微服务体系创建的非盈利技术社区。自2016年创建以来,在北京,上海,深圳,成都等地举办了多次技术沙龙,提供技术交流平台,帮助数万开发者快速学习Spring Cloud并用于生产。为更好的推动Spring Cloud在中国的发展,让更多的开发者受益。社区针对Spring Cl...

2018-09-17 23:20:52 12512 9

原创 Zuul中整合Swagger2,实现对源服务API测试

前言我们知道,Swagger2整合到项目中,可以非常方便地进行接口测试,是前后端对接效率提高。现在,我们可以在Zuul中整合Swagger2,通过Zuul配置文件配置的映射路径,来生成源服务接口的测试Dashboard。 github项目源码地址1、Zuul Server工程pom.xml文件中引入依赖: <dependency> ...

2018-06-06 10:21:27 3912 2

原创 为什么Netflix的API网关Zuul要升级为异步非阻塞架构?

Netflix宣布了通用API网关Zuul的架构转型。Zuul原本采用同步阻塞架构,转型后叫作Zuul2,采用异步非阻塞架构。Zuul2和Zuul1在架构方面的主要区别在于,Zuul2运行在异步非阻塞的框架上,比如Netty。Zuul1依赖多线程来支持吞吐量的增长,而Zuul 2使用的Netty框架依赖事件循环和回调函数。某组织对负责这次转型的Netflix项目经理Mikey Cohen进行了...

2018-05-25 10:41:51 3247

原创 基于Lua的Spring Cloud网关高可用通用Ngnix插件

项目github地址:点击跳转场景痛点在Spring Cloud微服务架构体系中,我们往往会部署一个Zuul集群来横向扩展我们的微服务应用,集群的上层是Nginx软负载,在实际情况中,往往会遇到Zuul宕机的尴尬事情,这时候从Nginx到这台机器的请求就会全部失效。此项目针对此痛点,用lua脚本实现定时拉取特定服务地址,动态无感知增减Zuul在Nginx中的负载节点。如果您希望...

2018-05-23 17:10:18 2342

原创 Nginx整合Lua步骤

1、Nginx:yum install gcc-c++yum install -y pcre pcre-develyum install -y zlib zlib-develyum install -y openssl openssl-develwget -c https://nginx.org/download/nginx-1.10.1.tar.gztar -xzf ngi...

2018-05-21 18:11:42 2346

原创 CPU-bound(计算密集型) 与 I/O-bound(I/O密集型)

前言在一个技术交流群里面看到有人在问,如何设置应用的线程池大小?有人回复了说,不谈并发类型(计算密集型或者IO密集型)的话,这个问题纯属瞎扯淡。下面是一些个人理解与在网上看到的比较好的解释。1、CPU-bound(计算密集型)计算密集型是说需要这个应用的运行需要充分运用CPU资源,比如说Hadoop离线处理应用、Storm清洗项目、视频图片渲染等等,CPU运算资源都被用来进行逻辑计算,这里引发线程池

2018-05-09 17:21:29 2057

原创 Spring Security 4.x -> 5.x 踩坑记录

1、应用服务基路径问题这个问题应该是Spring Boot 2.0升级带来的,既然遇到了,就在这里写一写。笔者在授权服务器想设置一个统一基路径,按照Spring Boot 1.0,是这样的:server.context-path=/xxx但是升级之后并不好使,最后看官方文档发现改掉了,现在是这样的:server.servlet.context-path=/xxx2、AuthenticationMan

2018-04-15 15:39:56 7630 1

转载 缓存穿透、缓存击穿、缓存雪崩解决方案分析

前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。一、缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。缓存穿透解...

2018-03-08 17:52:43 2581

原创 使用Allatori对Spring Boot项目进行代码混淆

Allatori混淆技术介绍Allatori是一个Java 混淆器,它属于第二代混淆器,因此它能够全方位的保护你的知识产权。 Allatori具有以下几种保护方式:命名混淆,流混淆,调试信息混淆,字符串混淆,以及水印技术。对于教育和非商业项目来说这个混淆器是免费的。支持war和jar文件格式,并且允许对需要混淆代码的应用程序添加有效日期。 有项目需要对代码进行保护,比较初级的方案就是对代码进行...

2018-02-27 11:31:00 7657 11

原创 Java 10 - 与“var类型推断机制”的第一次亲密接触

引言官方消息,Java 10 将在2018年3月20号正式发布。(我大Java 9 瞬间成了Vista……….)据传,官方在2017年12月14号已经完成了版本开发的主线合并。 迄今为止,在官方放出了Java 10少数新特性里面,局部变量类型推断(local-variable type inference) 绝对是备受万众瞩目的。它将我们常常在JS里面使用的var 变量引入到语言特性中,把我们

2018-01-18 23:41:09 19415 12

原创 GC调优——XX:TargetSurvivorRatio的使用

使用jmeter对服务进行压测,一个需要吞吐量的应用,2000个线程,JVM参数如下:-Xms4096m -Xmx4096m -Xss256K -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -Xmn3g -XX:+UseAdaptiveSizePolicy -XX:SurvivorRatio=10 -XX:TargetSu

2017-12-27 17:41:42 3630

原创 Spring Boot 内嵌容器Undertow参数设置

配置项:# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程,不要设置过大,如果过大,启动项目会报错:打开文件数过多server.undertow.io-threads=16# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载,高吞吐量的应用可以设置大一点server.unde

2017-12-26 20:50:15 28098

原创 一个由-XX:SurvivorRatio失效引发的探索

最近死磕一个关注吞吐量的应用程序,初期参数如下:-Xms4096m -Xmx4096m -Xss256K -XX:PermSize=128m -XX:MaxPermSize=256m -Xmn3g -XX:SurvivorRatio=4 -XX:+UseParallelGC -XX:ParallelGCThreads=16 -XX:+UseParallelOldGC -XX:Ma

2017-12-26 20:36:43 6683

翻译 大观程序员世界

Donald Knuth — AI之父Ken Thompson — B语言之父,Unix之父Dennis Ritchie — C语言之父,Unix之父Linus Torvalds — Linux之父…上个世纪,美利坚孕育了一大批上神级别的软件工程师。(问题一:Unix之母是个什么样的女人?)美国的计算机技术与计算机教育经过最近20年的发展,已变得触手可及。与此同时,世界上那些欠发

2017-12-02 16:48:33 2862

原创 线程条件队列ConditionObject源码解读

小记 好久没更博,窗外光芒万丈,冬日的晚晨,多么美好,就不浪费了,循着键盘上的点点星辰,开工!啥子是条件队列?我们都知道,在万类之祖Object里面定义了几个监视器方法:wait(),notify (),notifyAll(),配合synchronized语义来控制线程的一些状态,在JDK1.5之后,由Lock替代了synchronized,而这几个监视器由条件队列Condition来实现

2017-11-26 15:13:31 2171

转载 分布式系统常用思想和技术

一、分布式系统的难点分布式系统比起单机系统存在哪些难点呢?1. 网络因素由于服务和数据分布在不同的机器上,每次交互都需要跨机器运行,这带来如下几个问题:1. 网络延迟:性能、超时同机房的网络IO还是比较块的,但是跨机房,尤其是跨IDC,网络IO就成为不可忽视的性能瓶颈了。并且,延迟不是带宽,带宽可以随便增加,千兆网卡换成万兆,只是成本的问题,但延迟是物理限制,基本不可能降低。这带来的问题

2017-11-16 20:05:33 2227

转载 每秒处理10万订单支付架构

一、库分表在redis,memcached等缓存系统盛行的互联网时代,构建一个支撑每秒十万只读的系统并不复杂,无非是通过一致性哈希扩展缓存节点,水平扩展web服务器等。支付系统要处理每秒十万笔订单,需要的是每秒数十万的数据库更新操作(insert加update),这在任何一个独立数据库上都是不可能完成的任务,所以我们首先要做的是对订单表(简称order)进行分库与分表。在进行数据库操作时,一般都会有

2017-11-09 16:47:58 4135 4

转载 分布式后端接口幂等性设计思路

在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景:一个订单创建接口,第一次调用超时了,然后调用方重试了一次在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次当这笔订单开始支付,在支付请求发出之后,在服务端发生了扣钱操作,接口响应超时了,调用方重试了一次一个订单状态更新接口,调用方连续发送了两个消息,一个是已创建,一个是已付款。但是你先接收到已付款,然后又接收到了已创建

2017-10-30 10:48:14 6253 1

原创 一次线上问题排查:java.lang.OutOfmemoryError: PermGen Space

背景用基于Spring Boot(环境是java7)的系统做了一个报表导出的功能,第一次部署的时候用的默认JVM参数,但是测试人员在点击了一次导出之后,其他功能就疑似挂掉了,过了一会后才能正常使用;再点击导出,又出现这个问题,对这个问题的排查如下。jmap -heap pid查看堆内存使用情况Attaching to process ID 6082, please wait...Debugger

2017-10-25 16:49:28 5197 3

原创 究竟什么是可重入锁?

经历很久之前就听说了可重入锁,可重入锁究竟是什么意思,以前是囫囵吞枣的,只要记住ReentrantLock和sychronized是可重入锁就行了,爱咋用咋用,好吧,原谅我的无知,最近对基础查漏补缺,发现竟然对其一问三不知,赶紧预习一波,觉得有必要写一篇博客来讲解,就当做什么都没有发生吧,嘿嘿。。。释义广义上的可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁(

2017-10-22 23:20:41 36996 22

原创 ReentrantLock与公平锁、非公平锁实现

前言最近开始读JDK源码,所有心得准备总结成一个专栏,JDK Analysis系列的第一篇,就从万众瞩目的ReentrantLock开始吧,而谈到ReentrantLock,就不得不说AQS,它是AbstractQueuedSynchronizer类的简称,Doug Lea上神在JDK1.5将其引入,这才有了现在的并发包java.util.concurrent,所以要理解ReentrantLock的

2017-10-22 01:04:46 11527 11

翻译 Java9 基于异步响应式流的发布-订阅框架

为响应式流(Reactive Streams)增加的发布-订阅(publisher-subscriber)框架、并发包CompletableFuture类的增强,等等。。JEP266中为Java语言的并发性又引入许多新的方式:响应式流,一个为它而生互操作性更强的发布-订阅框架;并且为了Java9其他API而增强的 java.util.concurrent.CompletableFuture 类,

2017-10-08 17:08:12 10464 4

翻译 Java9 集合工厂方法

使集合框架更便捷的工厂方法JEP269中提议,为集合框架增添一些工厂方法,来使创建不可变集合类与含有少量元素的Map变得更加便捷。下文就为什么它们应运而生来展开详细的阐述。集合框架增加工厂方法是必然的结果Java饱受其语法臃肿的批评,比如,创建一个小而确定的集合类时(比如一个List),需要使用它的构造方法,然后将它的引用存放在局部变量中,通过引用来多次调用add()方法之后, 最后才来封装这个集合

2017-10-07 15:02:03 6760 2

翻译 Java9 进程API详细介绍

官方在JEP 102中引进新的进程API来增强java.lang.Process 类,并且引进java.lang.ProcessHandle 及其嵌套接口Info 来让开发者逃离时常因为要获取一个本地进程的PID而不得不使用本地代码的窘境。本文将详细介绍这些新特性。1、ProcessHandle 与 ProcessHandle.InfoJava 9 为抽象Process 类增加了许多新方法,通过这些

2017-09-24 22:09:44 6593 8

翻译 Java9 进程API

1. 概述Java中的进程API在Java5之前还是非常原始的,开启一个新进程唯一的方式是调用Runtime.getRuntime().exec() ,直到Java5发布之后,一些更加简明的开启新进程方式被封装到了ProcessBuilder 中。而在Java9中,你也将能使用一种全新的方式来获取当前系统所有正在运行的进程的相关信息。话不多说,先睹为快!2. 当前Java进程的信息我们通过调用ja

2017-09-24 20:38:01 4950 4

翻译 Java9 HTTP2.0 API入门与实践

简述如果您需要使用Java语言来请求HTTP资源,那么你可能会遇到多种解决方案,你最终可能会以一种合理的方式来达成这个目的 —– 引用第三方包。好消息,好消息,黄鹤带着小姨子回来了,皮革厂有救了:Java9除了有模块化特性之外,还附带了一个全新的HTTP客户端API。不仅支持HTTP2.0,还提供了一套有亲和力的API。SO,让我们来剥掉小姨子神秘的蕾丝面纱。HTTP2.0是啥子东东?HTTP2.0

2017-09-23 23:09:15 9083 8

转载 http2概述及Java9对其的支持

HTTP/2概述HTTP/2意在减轻为维护HTTP/1.1复杂的底层架构而带来的痛苦,以提高HTTP/1.1的性能。尽管HTTP/2仍然对HTTP/1.1向下兼容,但它已不再是一个基于文本的协议。当客户端通过HTTP/1.1请求建立一个连接时,所有请求将会被升级。从这一点上看,HTTP/2是用“二进制数据帧”来说话的。HTTP/2多路复用HTTP/2多路复用使得一个单独连接可以处理多个双向流,因而客

2017-09-23 16:05:21 6707 4

转载 Java9 modules (Jigsaw)模块化迁移

要点通过模块化的方式开发应用程序,实现更好的设计,如关注点分离和封装性。通过Java平台模块化系统(JPMS),开发者可以定义他们的应用程序模块,决定其他模块如何调用他们的模块,以及他们的模块如何依赖其他模块。对于已经使用了其他模块系统(如Maven或Gradle)的应用程序来说,还是有可能再加入JPMS。JDK为开发者提供了一些工具,用于将现有的代码迁移到JPMS。应用程序代码仍然可以依

2017-09-23 15:59:33 10490 5

转载 Java9新特性之HTTP2和REPL

对Java 9的炒作将不再局限于模块化(modularity),Java 9正在搜罗大量额外的功能模块,这些功能模块正作为Java增强提案(JEP)提交,并在OpenJDK (Java SE的参考实现项目)中实现。在这篇文章中,我们将重点关注一些或将在Java 9整个生命周期中,对开发者的工作生活影响最大的JEP,包括新的HTTP/2支持和JShell REPL(读取-求值-打印-循环),后者带来了

2017-09-23 15:46:38 4312 1

翻译 在IDEA中创建Java 9 modules(模块)的Hello World

IntelliJ IDEA 2017.1 支持Java9的模块化特性 (Project Jigsaw)。 在此版本,模块文件中还支持基于特定名称与关键字的自动补全功能 code completion, 并且你可以快速斧正你项目中的模块化代码。So,那就让我们来一探究竟什么是模块化工程。首先,我们创建一个普通的模块工程 IntelliJ IDEA module 其中包含了改变世界的伟大的 “Hello

2017-09-23 11:55:00 12760 6

翻译 Java 9 : 从零开始实现模块化(一)

Well, Java 9 is available so let’s make modules! 模块化在Java9中是炒鸡炒鸡重要的!今后,模块将是应用程序的基础构建单位。无论是使用动态语言或静态语言编写,模块都是应用程序的一个重要组成部分,且模块遵循单一功能原则。你可以将任意方法称为模块,正如函数式编程是基于模块一样。好了,总之,你get到这个点之后就记住:以后模块很重要很重要很重要 The i

2017-09-23 02:42:33 23260 5

转载 Java 9 模块化(Modular)介绍

前言今年,2017年,我们将迎来 Java 语言的 22 岁生日,22岁,对于一个人而言,正是开始大展鸿图的年纪,可是对于日新月异的科技圈中的一门开发语言而言,却是一个傲视群雄的老态龙钟的年纪。感谢 互联居 的技术分享文章,有兴趣的朋友可以去搜索微信公众号 互联居JVM 语言发展史JVM 家族也是在这22年中茁壮发展,并且都秉承着 Java 的革命口号:一处编译,随处运行。那么,JVM 的带头

2017-09-23 01:47:23 7900 2

转载 超详细的Spring Boot入门笔记

1. Spring Boot 入门 Spring Boot是Spring社区较新的一个项目。该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验,让Java开发也能够实现Ruby on Rails那样的生产效率。为Spring生态系统提供了一种固定的、约定优于配置风格的框架。 Spring Boot具有如下特性:为基于Spri

2017-08-24 23:44:13 35756 8

转载 深入分析ConcurrentHashMap的锁分段技术

术语定义 术语 英文 解释 哈希算法 hash algorithm 是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值。

2017-08-18 10:55:58 8149

转载 十条穷人思维,来看看你占了几条!

穷人思维一:总是出卖自己的时间,不懂得花钱买时间。当然这对于不少人来说可能是不得已,因为在没有钱的情况下只能出卖自己的时间,但是有些人并非没有钱,只是觉得钱比时间更宝贵,所以情愿花很多时间省下一点点小钱。与之相反的是富人把自己的时间看得非常宝贵,所有低价值、没有创造性、不会给自己带来较大收益的事情都尽可能外包出去。穷人思维二:拼命省钱,但是不知道在赚钱上想办法。为了买房的首付,为了买一样心仪的东西,

2017-08-14 16:35:04 3776 1

原创 Vue2.0 axios前后端登陆拦截器

vue更新到2.0之后,作者就宣告不再对vue-resource更新,而是推荐使用axios。前段时间第一次在项目里用到vue,关于登陆问题,这里写一下心得。首先后端:import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import com.lemon.gateway.system.po.Users;imp

2017-08-10 09:29:06 8023

Spring Boot + Allatori 代码混淆demo

基于Spring Boot,运用Allatori 6.4版本对代码进行混淆的demo。内含Allatori文档及详细工程。

2018-02-27

Spring Cloud Zuul动态路由demo

基于Spring Cloud Zuul的动态路由实现demo,实现动态配置,实时刷新

2017-09-21

微服务十二要素

微服务十二要素

2017-06-28

基于Spring Boot、Mybatis、Redis的SSO单点登录系统demo

基于Spring Boot、Mybatis、Redis的SSO单点登录系统demo,内含一个母系统,2个子测试系统,也可以当成整合demo来学习

2017-05-29

strman.jar

strman.jar

2017-04-29

rabbitmq-server-3.4.1-1.noarch.rpm

rabbitmq-server-3.4.1-1.noarch.rpm安装包

2017-04-29

Lovnx的留言板

发表于 2020-01-02 最后回复 2020-01-02

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

TA关注的人 TA的粉丝

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