2017

在微服务架构下,你的服务可能由不同的团队提供和维护,在这种情况下,接口的开发和维护可能会带来一些问题,比如服务端调整架构或接口调整而对消费者不透明,导致接口调用失败。 为解决这些问题,Ian Robinson提出了一个以服务消费者定义契约为驱动的开发模式:“Consumer-Driver Contracts(CDC)”,就是:消费者驱动契约。 通常我们开发中主要由服务提供方约定接口,虽然提供方架构调整或改变接口之前通常会通知消费者,但可能还存在上述风险,如果上线出现问题就GG了,而CDC则是以消费者提出接口契约,交由服务提供方实现,并以测试用例对契约进行产生约束,所以服务提供方在满足测试用例的情况下可以自行更改接口或架构实现而不影响消费者。 消费者驱动的契约测试(Consumer-Driven Contracts,简称CDC),是指从消费者业务实现的角度出发,驱动出契约,再基于契约...

简介本文章对应spring cloud的版本为(Dalston.SR4),具体内容如下: 开启Zuul功能 通过源码了解Zuul的一次转发 怎么开启zuul的重试机制 Edgware.RC1版本的优化 开启Zuul的功能首先如何使用spring cloud zuul完成路由转发的功能,这个问题很简单,只需要进行如下准备工作即可: 注册中心(Eureka Server) zuul(同时也是Eureka Client) 应用服务(同时也是Eureka Client) 我们希望zuul和后端的应用服务同时都注册到Eureka Server上,当我们访问Zuul的某一个地址时,对应其实访问的是后端应用的某个地址,从而从这个地址返回一段内容,并展现到浏览器上。 注册中心(Eureka Server)创建一个Eureka Server只需要在主函数上添加@EnableEurekaServ...

如何在Zuul中使用fallback功能我们在项目中使用Spring cloud zuul的时候,有一种这样的需求,就是当我们的zuul进行路由分发时,如果后端服务没有启动,或者调用超时,这时候我们希望Zuul提供一种降级功能,而不是将异常暴露出来。 在Dalston版本中,Spring cloud zuul提供这种降级功能,操作步骤如下: 在主函数上添加@EnbaleZuulProxy注解。 实现ZuulFallbackProvider接口。 对应ZuulFallbackProvider源码如下: public interface ZuulFallbackProvider { /** * The route this fallback will be used for. * @return The route the fallback will be used f...

前言我们知道Eureka分为两部分,Eureka Server和Eureka Client。Eureka Server充当注册中心的角色,Eureka Client相对于Eureka Server来说是客户端,需要将自身信息注册到注册中心。本文主要介绍的就是在Eureka Client注册到Eureka Server时RetryableClientQuarantineRefreshPercentage参数的使用技巧。 Eureka Client注册过程分析Eureka Client注册到Eureka Server时,首先遇到第一个问题就是Eureka Client端要知道Server的地址,这个参数对应的是eureka.client.service-url.defaultZone举个例子,在Eureka Client的properties文件中配置如下: eureka.client....

最近工作中由于要求只能用hibernate+jpa 与数据库进行交互,在简单查询中,jpa继承CrudRepository<T, ID>接口 ,然后利用jpa的方法命名规范进行jpql查询,然而在进行复杂查询时,需要继承JpaSpecificationExecutor接口 利用Specification 进行复杂查询,由于我自己就遇到了这一问题,查了好多资料,虽然有方法,但是都没有一个详细的讲解,以至于知道方法而不能很好的利用jpa复杂查询的方便之处。我将举几个栗子,来详细的说一下我自己在使用jpa多表复杂查询的场景和想法。 栗子1: 以一个实体类User中的几个属性进行筛选。 1. 名字2. ID3. 手机号 这是一个单表的多条件复杂查询,由于是在几个属性中进行筛选,其中的属性的个数不知道有多少个,所以只需要利用Specification 查询就可以很方便的实现这个...

虽然之前在《Spring Cloud构建微服务架构》系列文章中介绍了Hystrix服务降级与Hystrix断路器的概念。但是,还是一直收到这样的提问:降级与熔断区别是什么?并且在很多交流过程中,发现有不少童鞋对降级和熔断的概念有混淆的情况。所以,这篇博文准备换一种方式来说说这两个概念,以帮助读者更好的理解之前两篇文章中介绍的这两个重要知识。 下面通过一个日常的故事来说明一下什么是服务降级,什么是熔断。 故事的背景是这样的:由于小强在工作中碰到一些问题,于是想请教一下业界大牛小壮。于是发生了下面的两个场景: 小强在拿起常用手机拨号时发现该手机没有能够拨通,所以就拿出了备用手机拨通了某A的电话,这个过程就叫做降级(主逻辑失败采用备用逻辑的过程)。 由于每次小壮的解释都属于长篇大论,不太容易理解,所以小强每次找小壮沟通的时候都希望通过常用手机来完成,因为该手机有录音功能,这样自己可以慢慢消...

对于一个程序员,往往长期面对电脑,久坐不动,缺少运动,不合理的饮食习惯,熬夜等等。这些不良的生活习惯,往往导致程序员健康出现一些问题,如颈椎病,背部疼痛,腕管综合征等等。 《程序员健康指南》的目标是帮助程序员从一个周身疼痛,病弱且极有可能脾气暴躁的黑客,转变为一个快乐高效的程序员。这本书主要包括 对了解自身健康情况的一些测试方法。 改善健康情况的建议。 这本书的作者是运动员和健身教练出生的资深程序员 - Joe Kutner。据这本书的前言写的:“本书的每个观点都是建立在科学研究的基础之上。…我所用到的每一项研究基本都符合两个标准:一是必须曾经在同行评议类期刊上发表过,二是相应的研究成果必须符合现有的科学实证。极少没有同时达到这两个要求的证据,我都会明确指出。”感觉很靠谱的样子~ 下面是对这本书的一些健康建议做的整理。 健康建议了解自身的健康状况 测心率。 测血压。 进行一次眼部...

本篇源于Spring Cloud Config的一个问题,但这个问题并非所有人都会遇到。如果您遇到了,那必须得看看这篇,如果没有遇到您也应该看看,防患于未然! 问题描述之前有朋友提出Spring Cloud Config的配置中心在运行一段时间之后,发现修改了配置信息,但是微服务应用并拿不到新的配置内容。同时,发现配置中心存储配置的目录/tmp 的配置内容被清空了。 原因与解决首先,分析一下上面的问题,其实已经有一定的线索。表面现象是微服务从配置中心获取配置信息的时候获取不到最新的配置,而其根本原因就是在/tmp目录下的缓存仓库已经被清空了,所以导致无法正常的通过Git获取到最新配置,那么自然各个微服务应用就无法获取最新配置了。 其实该问题在Spring Cloud的官方文档中也有对应的说明,原文如下: With VCS based backends (git, svn) fi...

在前两篇博客搭建攻略中,主要介绍了博客平台的选择以及写博的常用工具。作为本系列的最后一篇,可能也是大家最感兴趣的一篇,我将给大家介绍一下在博客编写过程中,是如何创造收益的。 下面,以我个人为例,总结一下我写博的同时所创造的一些收益。我的收益大致可以分为两类:广告收益和知识付费。由于我的博客与微信公众号的内容同步,所以也一起说一下。 广告收益这一类比较直接,相信大家也都知道。主要的形态有两种:广告联盟与出售广告位。 广告联盟目前可以选择的联盟很多,但是比较靠谱的不多,个人主要尝试了谷歌联盟、百度联盟、淘宝联盟、京东联盟,其他没用过的这里就不做评论了。 谷歌联盟和百度联盟的收益比较稳定,按CPM(每千次展示)、CPC(每次点击)计费为主,这两个之间谷歌的收益更好一些,我目前也是选择这个,但是申请比较难,我大概申请了不下20次才通过。总之,每次驳回都会有原因,坚持不懈,改改改就过了! 淘宝...

这里推荐一个不错的Spring Cloud系列讲座,讲师简介如下: 小马哥,阿里巴巴技术专家,从事十余年Java EE 开发,国内微服务技术讲师。目前主要负责微服务技术推广、架构设计、基础设施、迁移等。重点关注云计算、微服务以及软件架构等领域。获得过 SUN Java(SCJP、SCWCD、SCBCD)以及 Oracle OCA 等的认证。 系列套餐 打包购买更实惠! Java 微服务实践 - Spring Boot Java 微服务实践 - Spring Cloud Java 微服务实践 - Spring Boot / Spring Cloud 讲座大纲 Java 微服务实践 - Spring Cloud 系列(一)云原生应用 Java 微服务实践 - Spring Cloud 系列(二)配置客户端 Java 微服务实践 - Spring Cloud 系列(三)配置服务器...

在完成了博客的搭建之后,我们后续的主要任务就是创作内容了。而创作的过程中,我们又会有一系列的问题,比如:我们用什么工具来编写文章呢?怎么样才能画出一些高逼格的图片呢?这些图片的存储和处理怎么办呢?文章中的代码高亮如何实现呢? 要解决这些问题其实并不难,无非就是引入不同的工具来帮助我们,好的工具可以让我们的创作事半功倍!下面就来介绍下我常用的几个工具吧。 Markdown编辑器先来推荐一下我们要用的最重要的一个工具:Marddown编辑器。我们需要使用它来完成所有的创作内容,本人尝试了非常多的编辑器,最终锁定在下面这款Typora,因此推荐给大家。 推荐工具:Typora 官方地址:https://www.typora.io/ 推荐理由:最为一款免费编辑器,可以说是相当的良心,是我目前所知道的最好用的免费编辑器了,没有之一!!!它支持多个主流的操作系统,不论你是Windows用户还...

虽然在大学生涯就有开始写技术博客,但是一直都是三分钟热度,断断续续的在一些大平台上记录过一些内容,最终也都不了了之。真正开始搭建属于自己的博客(didispace.com)和分享技术内容是从2016年1月开始的,积累至今也有1年多的时间。在写博的过程中,除了内容本身的收获之外,还获得了很多其他方面的经验,而这些经验主要来自于对博客内容编辑的一些强迫症。 接下来,就跟大家分享一下我在写博过程中用过的一些工具,同时也借此文回应一下经常在博客上问我的博客是用什么搭建的、架构图是用什么画的等等类似问题!希望下面的内容可以帮助到有意搭建博客或者已经在编写自己博客的朋友。 自建博客的选择在编写博客内容之前,我们首先要选择一个合适的博客平台。如果只是注重内容,对于站点布局等没有强迫症的用户,可以直接选择简书、开源中国等提供博客服务的平台来编写自己的文章。而对于很多喜欢DIY的程序猿来说,可能使用开...

路径匹配不论是使用传统路由的配置方式还是服务路由的配置方式,我们都需要为每个路由规则定义匹配表达式,也就是上面所说的path参数。在Zuul中,路由匹配的路径表达式采用了Ant风格定义。 Ant风格的路径表达式使用起来非常简单,它一共有下面这三种通配符: 通配符 说明 ? 匹配任意的单个字符 * 匹配任意数量的字符 ** 匹配任意数量的字符,支持多级目录 我们可以通过下表的示例来进一步理解这三个通配符的含义并参考着来使用: URL路径 说明 /user-service/? 它可以匹配/user-service/之后拼接一个任务字符的路径,比如:/user-service/a、/user-service/b、/user-service/c /user-service/* 它可以匹配/user-service/之后拼接任意字符的路径,比如:/...

在开始这篇文章之前,我们似乎应该思考下为什么需要搞清楚Spring Security的内部工作原理?按照第二篇文章中的配置,一个简单的表单认证不就达成了吗?更有甚者,为什么我们不自己写一个表单认证,用过滤器即可完成,大费周章引入Spring Security,看起来也并没有方便多少。对的,在引入Spring Security之前,我们得首先想到,是什么需求让我们引入了Spring Security,以及为什么是Spring Security,而不是shiro等等其他安全框架。我的理解是有如下几点: 在前文的介绍中,Spring Security支持防止csrf攻击,session-fixation protection,支持表单认证,basic认证,rememberMe…等等一些特性,有很多是开箱即用的功能,而大多特性都可以通过配置灵活的变更,这是它的强大之处。 Spring Se...

前面的部分,我们关注了Spring Security是如何完成认证工作的,但是另外一部分核心的内容:过滤器,一直没有提到,我们已经知道Spring Security使用了springSecurityFillterChian作为了安全过滤的入口,这一节主要分析一下这个过滤器链都包含了哪些关键的过滤器,并且各自的使命是什么。 4 过滤器详解4.1 核心过滤器概述由于过滤器链路中的过滤较多,即使是Spring Security的官方文档中也并未对所有的过滤器进行介绍,在之前,《Spring Security(二)–Guides》入门指南中我们配置了一个表单登录的demo,以此为例,来看看这过程中Spring Security都帮我们自动配置了哪些过滤器。 Creating filter chain: o.s.s.web.util.matcher.AnyRequestMatcher@1, [...