RestTemplate详解
写在前面在前面介绍服务发现与消费实现的时候,就使用到了RestTemplate,该对象会使用Ribbon的自动化配置,同时通过配置@LoadBalanced注解来开启客户端负载均衡功能。(前面也说过Ribbon实现了服务消费者的客户端负载均衡功能。)前面的例子演示了通过RestTemplate来发起一个GET或者POST请求,其实是实现对HELLO-SERVICE服务提供的/hello接口进行调用。
接下来介绍RestTemplate针对几种不同请求类型和参数类型的服务调用实现,同时为了加深印象,笔者会通过一个例子来进行验证。
GET请求首当其冲是Get请求,对于Get请求我们太司空见惯了,在RestTemplate中,我们可以通过以下两种方式来发送一个GET请求。
getForEntity方法使用getForEntity方法返回了一个ResponseEntity<T>对象,该对象是Spring对HTTP请求响应的封装,其中主要存储了HTTP的几个重要元素,如HTTP请求状态码的枚举对象HttpStatus(也就是常说的404,500等状态码),在它的父类HttpEntit ...
Ribbon实现客户端负载均衡
SpringCloud Ribbon是一个基于Http和Tcp的客户端负载均衡工具,它基于Netflix Ribbon实现。通过SpringCloud的封装,可以让我们轻松的将面向服务的REST模板请求自动转换成客户端负载均衡的服务调用。SpringCloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个SpringCloud构建的微服务和基础设施中。
因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续将要学习的Feign,它也是基于Ribbon实现的工具。所以对于SpringCloud Ribbon的理解和使用,对于我们使用SpringCloud来构建微服务非常重要。
负载均衡负载均衡在系统架构中是一个非常重要的角色,因为它是应对系统高可用、网络压力缓冲和处理能力扩容的重要手段之一。
服务端负载均衡一般情况下我们所说的负载均衡通常都是指服务端负载均衡,服务端负载均衡又分为两种,一种是硬件负载均衡,还有一种是软件负载均衡。
硬件负载均衡主要通过在服务器节点之间安装专门用于负 ...
Eureka源码分析
Eureka源码分析通过前面的学习,我们对Eureka中各个核心元素的通信行为有了较为详细的认识,为了更加深入理解它的运作和配置,接下来将结合源码来分别看看各个通信行为是如何实现的。
在阅读源码之前,先回顾之前所实现的内容,从而找到一个合适的切入口来分析。首先对于服务注册中心、服务提供者、服务消费者这三个核心元素来说,服务提供者和服务消费者都是Eureka Client,在整个运行机制中是大部分通信行为的主动发起者,而服务注册中心主要是处理请求的接收者。因此Eureka采用的是客户端发现机制,我们可以从Eureka Client着手来分析它是如何完成这些主动通信行为的。
仔细回忆一下,当我们需要将一个普通的SpringBoot应用注册到Eureka Server中,或者是从Eureka Server中获取服务列表时都进行了哪些操作?显然只进行了两步:第一步,在项目入口类上添加@EnableDiscoveryClient注解;第二步,在application.yml配置文件中通过eureka.client.service-url.defaultZone参数来配置服务注册中心的位置。
那就 ...
Eureka架构分析
Eureka详解在前面通过一个简单的demo演示了服务注册与发现,构建了Eureka服务治理体系中的三个核心角色:服务注册中心、服务提供者、服务消费者。通过对前一篇的学习我们已经对Eureka的服务治理机制有了一些初步的认识,并学会了如何搭建单节点和高可用的服务注册中心,也知道了如何使用Eureka的注解和配置将SpringBoot应用纳入Eureka的服务治理体系中,成为服务提供者或是消费者。同时对于客户端负载均衡的服务消费也有了一些简单的接触,但是在实际工作中遇到的系统结构往往比前面列举的demo要复杂的多,此时如果仅仅依靠之前构建的服务治理内容,大多数情况是无法直接满足业务系统要求的,还需要结合实际情况来做一些配置、调整和扩展。因此本篇来学一些较深的知识,如Eureka的基础架构、节点间的通信机制、以及一些进阶的配置等。
基础架构在前面介绍服务治理时,举了一个例子,尽管该例子非常简单,但是却包含了整个Eureka服务治理基础架构的三个核心要素:服务注册中心、服务提供者、服务消费者。
服务注册中心,它是Eureka提供的服务端,提供服务注册与发现的功能,如前面实现的eureka-s ...
Eureka高可用注册中心
高可用注册中心高可用的必要性在微服务架构这样的分布式环境中,开发者需要充分考虑故障发生的情况,所以在生产环境中必须对各个组件进行高可用部署,对于微服务如此,对于服务注册中心也一样。在前面咋们使用的都是单节点的服务注册中心,这在生产环境中显然是不合适的,因此我们需要构建高可用的服务注册中心以增强系统的可用性。
Eureka Server从设计时就考虑了高可用的问题,在Eureka的服务治理设计中,所有的节点既是服务提供方,也是服务消费方,注册中心也不例外。在前面搭建单节点的配置中,我们设置过下面两个参数,用于禁止服务注册中心自己注册自己:
1234eureka: client: register-with-eureka: false fetch-registry: false
Eureka Server的高可用实际上就是将自己作为服务向其他服务注册中心注册自己,这样就可以形成一组互相注册的服务注册中心,以实现服务清单的互相同步,进而达到高可用的效果。
接下来尝试搭建高可用的服务注册中心集群,这里选择在前面实现的单节点服务注册中心的基础上进行扩展,使之变成一个双节点的服务注册 ...
搭建Eureka服务注册中心
写在前面在前面学习了Eureka相关的基础知识,接下来将通过一些简单的示例,来学习如何使用Eureka构建注册中心以及进行注册与发现服务。
搭建服务注册中心为了更好的学习,此处提供两种方式,第一种是基于一个基础的SpringBoot工程来构建,另一种则是直接构建Eureka项目。
基于普通的SpringBoot工程第一步,创建一个普通的Spring Boot工程。首先需要创建一个普通的SpringBoot工程,工程名称为eureka-server,注意里面一个starter都不需要添加,这样创建成功后pom文件中只引用了一个父starter。
第二步,添加Eureka依赖。工程创建成功之后,需要向pom.xml文件中添加eureka-server依赖,笔者使用的SpringBoot版本是2.3.3,因此所对应的Eureka版本为Hoxton.SR7,请注意SpringBoot版本和Eureka的版本必须一一对应,开发者可以点击 这里进行查阅:
当然了,如果想查阅更为详细的版本对应信息,可以点击 这里:
注意此时pom.xml依赖文件中的依赖信息添加,可以参考Spring Cl ...
Spring Cloud Eureka介绍
SpringCloud Eureka是SpringCloud Netflix微服务套件中的一部分,它基于Netflix Eureka进行了二次封装,不是重复造轮子,主要负责完成微服务架构中的服务治理功能。SpringCloud通过为Eureka增加了SpringBoot风格的自动化配置,我们只需要通过简单引入依赖和注解配置就能让SpringBoot构建的微服务应用轻松的与Eureka服务治理体系进行整合。
服务治理服务治理是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册与发现。你可能要问了,在微服务架构中为什么需要服务治理模块呢?往下看你就知道了。
在最开始构建微服务系统的时候可能服务并不多,我们可以通过做一些静态配置来完成服务的调用。比如这里有两个服务A和B,其中服务A需要调用服务B来完成一个业务操作,为了实现服务B的高可用,开发者可能采用服务端的负载均衡或者客户端的负载均衡,但是无论怎样还需要手工来维护服务B的具体实例清单。
但是随着业务的发展,系统功能越来越复杂,相应的微服务应用也越来越多,此时依赖采用静态配置这种方式就显得捉襟见肘了。并且面对不断发展 ...
整合单机版FastDFS
FastDFSFastDFS简介FastDFS是一个开源的高性能分布式文件系统(Distributed File System)。 它的主要功能包括文件存储、文件同步、文件访问,以及高容量和负载平衡。主要解决了海量数据的存储问题,非常适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
FastDFS支持Linux、FreeBSD等UNIX系统,很类似于Google FS(GFS),但不是通用的文件系统,只能通过专有的API进行访问,目前提供了C、Java和PHP等语言的API。FastDFS不仅可以解决大容量文件的存储问题,还对追求高性能和高扩展性的互联网行业提供了一种可行的解决方案。
FastDFS架构下面是一张来自FastDFS官网的系统架构图:
从图中可以知道FastDFS架构包括Tracker Server和Storage Server两部分,其中Tracker Server是跟踪服务器,用来追踪文件,可以理解为文件的一个索引,而 Storage Server是存储服务器,用来保存文件。
开发者上传文件的文件最终保存在Sto ...
项目构建与部署
其实按照正常的学习顺序,项目的构建与部署应当安排在第一章,但是放在后面则说明本套学习笔记差不多应该结束了,一个项目到了不部署的阶段。
JAR项目打包本篇就不再新建SpringBoot项目了,而是使用第一个hellospringboot项目作为例子进行介绍。使用spring-boot-maven-plugin插件可以创建一个可执行的JAR应用程序,前提是应用程序的parent为spring-boot-starter-parent。在pom.xml文件中新增打包插件的build:
1234<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId></plugin>
配置完成后,在当前项目的根目录(与pom.xml文件同级目录)下执行如下的Maven命令进行打包操作:
1mvn package
如果你使用的开发工具为I ...
应用监控
当一个SpringBoot项目在运行时,开发者需要对SpringBoot项目进行实时监控,获取项目的运行情况,在项目出错时能够实现自动报警等。SpringBoot提供了actuator(读作[ˈæktjuˌeɪtər])来帮助开发者获取应用程序的实时运行数据。开发者可以选择使用HTTP端点或JMX来管理和监控应用程序,获取应用程序的运行数据,包括健康状况、应用信息、内存使用情况等。
端点配置开启端点在SpringBoot中开启应用监控非常容易,只需要添加actuator依赖即可,actuator(执行器)是制造业术语,指一个用于移动或控制机械装置的工具,一个很小的变化就能让执行器产生大量的运动。
第一步,创建项目。使用spring Initializr构建工具构建一个SpringBoot的Web应用,名称为actuatorspringboot,然后在pom.xml文件中添加如下依赖:
123456789<!--添加actuator依赖--><dependency> <groupId>org.springframework.boot</gr ...