Spring Cloud(十九):Spring Cloud Gateway(读取、修改 Request Body)Spring Cloud Gateway(以下简称 SCG)做为网关服务,是其他各服务对外中转站,通过 SCG 进行请求转发。在请求到达真正的微服务之前,我们可以在这里做一些预处理,比如:来源合法性检测,权限校验,反爬虫之类… 因为业务需要,我们的服务的请求参数都是经过加密的。之前是在各个微服务的拦截器里对来解密验证的,现在既然有了网关,自然而然想把这一步骤放到网关层来统一解决。 如果是使用普通 2019-01-17 Spring Cloud Microservices Gateway Filter Spring Cloud Gateway
Spring Cloud(十八):Alibaba 之 Nacos上个月最后一天的凌晨,Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器,并在 maven 中央库发布了第一个版本。 目前 Spring Cloud Alibaba 还只能算是预览版吧,里边的坑肯定不少,不过我还是决定试试,看看 Alibaba 到底靠谱不靠谱。 2018-11-10 Spring Cloud Alibaba Nacos
Go 包管理解决之道 —— Modules 初试有一段时间没有用 Go 了,今天去社区一看,发现了 Go Modules 已经面世了。 Go 的包管理是一直是为人诟病之处,从 Go 1.5 引入的 vendor 机制,到准官方工具 dep,目前为止还没一个简便的解决方案。 不过现在 go modules 随着 golang1.11 的发布而和我们见面了,这是官方提倡的新的包管理,乃至项目管理机制,可以不再需要 GOPATH 的存在。 欣喜之余 2018-11-09 Golang
Spring Cloud Finchley 正式发布经过数个前期测试版本,Spring Cloud Finchley 终于迎来了正式版本! Spring Cloud Finchley 实战系列 2018-06-20 Spring Cloud
Sublime Text 一二事儿作为一位开发人员,经常要编辑各种各样的文件。而在 Mac 系统中,文件名的后缀也是五花八门的,如果系统识别出这是一个文本文件,右键菜单的「Open with」可能还有点用,如果识别不出来,那么手动选择应用程序就比较麻烦了: 我经常使用 Sublime Text 来编辑,这时候就有点怀念 Windows 了,希望也能在右键菜单里增加一个「Open in Sublime Text」的选项,这样每次就 2018-06-17 Sublime Text
Spring Cloud(十七):Spring Boot Admin 2.0Spring Boot Admin 在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI,是用来管理 Spring Boot 应用程序的一个简单的界面,提供如下功能: 显示 name/id 和版本号 显示在线状态 Logging 日志级别管理 JMX beans 管理 Threads 会话和线程管理 Trace 应用请求跟踪 应用运行参数信息,如: Java 系统 2018-05-23 Spring Boot Spring Cloud Spring Boot Admin
记一个由于 IDEA 更新引发的神奇问题上周六用 IDEA 直接 run 一个 Spring Boot 工程的 Application Bootstrap 的时候,什么错误也没有就直接退出了(从未成功运行过) 1Process finished with exit code 1 或者是这样的异常(曾经成功启动过) 123java.lang.IllegalStateException: Failed to load property s 2018-05-21 Spring Boot Maven IDEA
将 Kindle 电子书导入 iBooksKindle 已经用了好久了,确实极大的提升了我的阅读效率。Kindle 可谓是既实惠又方便,但是也有一些淡淡的忧伤——技术类书籍阅读不方便。 本文中我就通过将 Kindle 的电子书转为 edup 格式,然后导入 iBooks 来缓解这种不方便。(另外本文也可以解决 Amazon 因美区和中区账号不互通导致 Kindle 要来回切换账号的尴尬) 本篇文章,只供个人购买的正版书籍进行参考使用。请 2018-05-19 Kindle iBooks DRM Calibre Reading
折腾:在 Hexo 的 page 中嵌入 iframe周末没事就把之前的一键给证件照片打水印的那个小工具更新了一下。因为我平时也要用,而自从上次将博客又从 Ghost 迁回 Hexo 后,这些小工具就一直没空迁过来。这周末得空,就把这个给迁移一下,顺便又更新了一下,要不每次自己在 PS 里搞水印总是有种杀鸡用牛刀的感觉。 Hexo 跟 Ghost 的区别还是挺大的(那不废话嘛,一静一动能不大嘛)。在 Ghost 里我能直接在 page 页里写完整 H 2018-05-13 Hexo Blog Front-end iframe
Spring Cloud(十六):Spring Cloud Gateway(续)本文主要介绍 Spring Cloud Gateway 的路由熔断、路由重试和高可用。 路由熔断在前面学习 Hystrix 的时候,我们知道 Hystrix 有服务降级的能力,即如果服务调用出现了异常,则执行指定的 fallback 方法。Spring Cloud Gateway 也融合了 Hystrix,可以为我们提供路由层面服务降级。我们就来看看如何来做。 2018-05-11 Spring Cloud Microservices Hystrix Gateway Filter Spring Cloud Gateway Retry
Spring Cloud(十五):Spring Cloud Gateway(限流)绝境长城(冰与火之歌) 在高并发的应用中,限流是一个绕不开的话题。限流可以保障我们的 API 服务对所有用户的可用性,也可以防止网络攻击。 一般开发高并发系统常见的限流有:限制总并发数(比如数据库连接池、线程池)、限制瞬时并发数(如 nginx 的 limit_conn 模块,用来限制瞬时并发连接数)、限制时间窗口内的平均速率(如 Guava 的 RateLimiter、nginx 的 li 2018-05-10 Spring Cloud Microservices Gateway Filter Spring Cloud Gateway Finchley Rate limiting
Spring Cloud(十四):Spring Cloud Gateway(过滤器)在上一篇文章中,我们了解了 Spring Cloud Gateway 作为网关所具备的基础功能:路由。本篇我们将关注它的另一个功能:过滤器。 Spring Cloud Gateway 已经内置了很多实用的过滤器,但并不能完全满足我们的需求。本文我们就来实现自定义过滤器。虽然现在 Spring Cloud Gateway 的文档还不完善,但是我们依旧可以照猫画虎来定制自己的过滤器。 2018-05-09 Spring Cloud Microservices Gateway Filter Spring Cloud Gateway
Spring Cloud(十三):Spring Cloud Gateway(路由)本篇文章主要介绍了什么是 Spring Cloud Gateway,并基于 Spring Cloud Gateway 的 Finchley.RC1 版本编写一个 Spring Cloud Gateway 的入门案例,即基本代理的路由转发配置。 2018-05-08 Spring Cloud Microservices Router Gateway Spring Cloud Gateway
Lombok 与 JDK 10Update at 2018-06-21:Lombok 的 v1.16.22 版本已经解决了这个问题。以下内容仅做记录。 Lombok 这个工具很好用,从去年了解之后我编码的时候已经几乎离不开它了。今天在写 Log4j2 的 Demo 的时候,也顺手就加上了@Log4j2,但是意想不到的情况出现了:找不到符号。 因为我已使用 Lombok 多时,看到这个报错还是挺意外的,更意外的是这个错误的根源竟 2018-05-06 Java Lombok
Log4j2 将不同线程不同级别日志输出到不同的文件中在多线程编程中,如果不做特殊的设置,那么多个线程的日志会输出到同一个日志文件中,这样在查阅日志的时候,会带来诸多不便。很自然地,我们想到了让不同的线程输出日志到不同的文件中,这样不是更好吗? 本篇文章我们利用 Log4j2 来将不同线程的不同级别的日志打印到不同的文件中,并使用异步的方式来大大的提高日志输出的性能。 2018-05-06 Java Log4j2
MySQL 优化之 Covering Index在网上随便搜搜,就能找到大把的关于 MySQL 优化的文章,不过里面很多都不准确,说个常见的: 1SELECT a FROM ... WHERE b = ... 一般来说,很多文章会告诫你类似这样的查询,不要在 “a” 字段上建立索引,而应该在 “b” 上建立索引。这样做确实不错,但是很多时候这并不是最佳结果。为什么这样说?这还得先从索引来说起。 2018-05-05 Performance MySQL
MySQL 优化原理(三)聊聊 MySQL 配置。 大多数开发者可能不太会关注 MySQL 的配置,毕竟在基本配置没有问题的情况下,把更多的精力放在 schema 设计、索引优化和 SQL 优化上,是非常务实的策略。这时,如果再花力气去优化配置项,获得的收益通常都比较小。更多的时候,基于安全因素的考量,普通开发者很少能够接触到生产环境的 MySQL 配置。正是这样,导致开发者(包括我)对 MySQL 的配置不甚了解,希望本 2018-05-05 Performance MySQL
MySQL 优化原理(二)如果有同学看完上一篇关于 MySQL 文章,文末留有两个很开放的问题,如有兴趣可以在脑袋里想想。本文也会试着回答这两个问题,希望能给你一些参考。现在可以思考一个问题,如果数据量非常大的情况下,您根据业务选择了合适的字段,精心设计了表和索引,还仔细的检查了所有的 SQL,并确认已经没什么问题,但性能仍然不能满足您的要求,该怎么办呢?还有其他优化策略吗?答案是肯定的。接下来继续和您讨论一些常用的 My 2018-05-05 Performance MySQL
MySQL 优化原理(一)说起 MySQL 的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *、不使用 NULL 字段、合理创建索引、为字段选择合适的数据类型……你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。 2018-05-05 Performance MySQL
MySQL 轻松创建千万级测试数据在进行查询操作的性能测试时,我们往往需要测试大数据量模式下的查询功能的性能,这时就需要我们去创造一些测试数据来填充数据库,来模拟真实环境。制造数据的方式有很多种。可以使用 LoadRunner,JMeter 等压测工具压一些数据进去,但这样做效率不高。也可以用程序生成一个数据文件,再用 load data 加载,这样虽然快了但是又不够灵活。 本文介绍两种快速生成大量测试数据的方法,分别使用存储过程 2018-05-04 MySQL