SpringCloud demo (极速- 入门)
本文内容纲要:
-推荐:地表最强开发环境系列
-推荐:springCloud微服务系列
-SpringCloud全家桶简介
-SpringCloud开发脚手架
-启动EurekaServer注册中心
-启动Config配置中心
-config-server服务
-微服务入门案例
-uaa-provider微服务提供者
-uaa-provider实现一个Rest接口
-uaa-provider的运行结果
-demo-provider完成RPC远程调用
-REST服务的本地代理接口
-通过REST服务的本地代理接口,进行RPC调用
-启动demo-provider
-通过swagger执行RPC操作
-环境准备:
-回到◀疯狂创客圈▶
- 疯狂创客圈经典图书:《NettyZookeeperRedis高并发实战》面试必备+面试必备+面试必备【博客园总入口】
- 疯狂创客圈经典图书:《SpringCloud、Nginx高并发核心编程》大厂必备+大厂必备+大厂必备【博客园总入口】
- 入大厂+涨工资必备的高并发社群:【博客园总入口】
推荐:地表最强开发环境系列
工欲善其事必先利其器 |
---|
地表最强开发环境:vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解) |
地表最强热部署:javaSpringBootSpringCloud热部署热加载热调试 |
地表最强发请求工具(再见吧,PostMan):IDEAHTTPClient(史上最全) |
地表最强PPT小工具:屌炸天,像写代码一样写PPT |
无编程不创客,无编程不创客,一大波编程高手正在疯狂创客圈交流、学习中!找组织,GO |
推荐:springCloud微服务系列
推荐阅读 |
---|
nacos实战(史上最全) |
sentinel(史上最全+入门教程) |
springcloud+webflux高并发实战 |
Webflux(史上最全) |
SpringCloudgateway(史上最全) |
无编程不创客,无编程不创客,一大波编程高手正在疯狂创客圈交流、学习中!找组织,GO |
SpringCloud全家桶简介
SpringCloud全家桶是Pivotal团队提供的一整套微服务开源解决方案,包括服务注册与发现、配置中心、全链路监控、服务网关、负载均衡、断路器等组件,以上的组件主要通过对NetFilx的NetFlixOSS套件中的组件通过整合完成的,其中,比较重要的整合组件有:
(1)spring-cloud-netflix-Eureka注册中心
(2)spring-cloud-netflix-hystrixRPC保护组件
(3)spring-cloud-netflix-ribbon客户端负载均衡组件
(4)spring-cloud-netflix-zuul内部网关组件
(6)spring-cloud-config配置中心
SpringCloud全家桶技术栈除了对NetFlixOSS的开源组件做整合之外,还有整合了一些选型中立的开源组件。比如,SpringCloudZookeeper组件整合了Zookeeper,提供了另一种方式的服务发现和配置管理。
SpringCloud架构中的单体业务服务是基于SpringBoot应用进行启动和执行的。SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。SpringCloud利用SpringBoot是什么关系呢?
(1)首先SpringCloud利用SpringBoot开发便利性巧妙地简化了分布式系统基础设施的开发;
(2)其次SpringBoot专注于快速方便地开发单体微服务提供者,而SpringCloud解决的是各微服务提供者之间的协调治理关系;
(3)第三SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,其依赖SpringBoot而存在。
最终,SpringCloud将SpringBoot开发的一个个单体微服务整合并管理起来,为各单体微服务提供配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等基础的分布式协助能力。
SpringCloud开发脚手架
无论是单体应用还是分布式应用,如果从零开始开发,都会涉及很多基础性的、重复性的工作需要做,比如用户认证,比如session管理等等。有了开发脚手架,这块基础工作就可以省去,直接利用脚手架提供的基础模块,然后按照脚手架的规范进行业务模块的开发即可。
笔者看了开源平台的不少开源的脚手架,发现很少是可以直接拿来做业务模块开发的,或者封装的过于重量级而不好解耦,或者业务模块分包不清晰而不方便开发,所以,本着简洁和清晰的原则,笔者的发起的疯狂创客圈社群推出了自己的微服务开发脚手架crazy-springcloud,其大致的模块和功能具体如下:
crazymaker-server--根项目
│├─cloud-center--微服务的基础设施中心
││├─cloud-eureka--注册中心
││├─cloud-config--配置中心
││├─cloud-zuul--网关服务
││├─cloud-zipkin--监控中心
│├─crazymaker-base--公共基础依赖模块
││├─base-common--普通的公共依赖,如utils类的公共方法
││├─base-redis--公共的redis操作模块
││├─base-zookeeper--公共的zookeeper操作模块
││├─base-session--分布式session模块
││├─base-auth--基于JWT+SpringSecurity的用户凭证与认证模块
││├─base-runtime--各provider的运行时公共依赖,装配的一些通用SpringIOCBean实例
│├─crazymaker-uaa--业务模块:用户认证与授权
││├─uaa-api--用户DTO、Constants等
││├─uaa-client--用户服务的Feign远程客户端
││├─uaa-provider--用户认证与权限的实现,包含controller层、service层、dao层的代码实现
│├─crazymaker-seckill--业务模块:秒杀练习
││├─seckill-api--秒杀DTO、Constants等
││├─seckill-client--秒杀服务的Feign远程调用模块
││├─seckill-provider--秒杀服务核心实现,包含controller层、service层、dao层的代码实现
│├─crazymaker-demo--业务模块:练习演示
││├─demo-api--演示模块的DTO、Constants等
││├─demo-client--演示模块的Feign远程调用模块
││├─demo-provider--演示模块的核心实现,包含controller层、service层、dao层的代码实现
在业务模块如何分包的问题上,实际上大部分企业都有自己的统一规范。crazy-springcloud脚手架从职责清晰、方便维护、能快速导航代码的角度出发,将每一个业务模块,细分成以下三个子模块:
(1){module}-api
此子模块定义了一些公共的Constants业务常量和DTO传输对象,该子模块既被业务模块内部依赖,也可能被依赖该业务模块的外部模块所依赖;
(2){module}-client
此子模块定义了一些被外部模块所依赖的Feign远程调用客户类,该子模块是专供外部的模块,不能被内部的其他子模块所依赖;
(3){module}-provider
此子模块是整个业务模块的核心,也是一个能够独立启动、运行的服务提供者(Application),该模块包含涉及到业务逻辑的controller层、service层、dao层的完整代码实现。
crazy-springcloud微服务开发脚手架在以下两方面进行了弱化:
(1)在部署方面对容器的介绍进行了弱化,没有使用Docker容器而是使用Shell脚本。有多方面的原因:一是本脚手架初心是学习,使用Shell脚本而不是Docker去部署,方便大家学习Shell命令和脚本;二是Java和Docker其实整合得很好,学习非常容易,可以稍加配置就能做到一键发布,找点资料就可以掌握;三是部署和运维是一个专门的工作,生产环境的部署、甚至是整个自动化构建和部署的工作,实际上属于运维的专项工作,由专门的运维岗位人员去完成,而部署的核心仍然是Shell脚本,所以对于开发人员来说掌握Shell脚本才是重中之重。
(2)对监控软件的介绍进行了弱化。本书没有对链路监控、JVM性能指标、断路器监控软件的使用做专门介绍。有多方面的原因:一是监控的软件太多,如果介绍太全,篇幅又不够,介绍太少,大家又不一定用到;二是监控软件的使用大多是一些软件的操作步骤和说明,原理性的内容比较少,使用视频的形式会比文字形式知识传递的效果会更好。疯狂创客圈后续可能(但不一定)会推出一些微服务监控方面的教学视频供大家参考,请大家关注社群博客。不论如何,只要掌握了SpringCloud核心原理,对那些监控组件使用的掌握,对大家来说基本上都是一碟小菜。
启动EurekaServer注册中心
Eureka本身是Netflix开源的一款注册中心产品,并且SpringCloud提供了相应的集成封装,选择其作为注册中心的讲解实例,是出于以下的原因:
(1)Eureka在业界的应用十分广泛(尤其是国外),整个框架也经受住了Netflix严酷生产环境的考验。
(2)除了Eureka注册中心,Netflix的其他服务治理功能也十分强大,包括Ribbon、Hystrix、Feign、Zuul等组件,结合到一起组成了一套完整的服务治理框架,使得服务的调用、路由也变得异常容易。
那么,Netflix和SpringCloud是什么关系呢?
Netflix是一家互联网流媒体播放商,是美国视频巨头,访问量非常的大。也正是如此,Netflix把整体的系统迁移到了微服务架构。并且,Netflix就把它的几乎整个微服务治理生态中的组件,都开源贡献给了Java社区,叫做NetflixOSS。
SpringCloud是Spring背后的Pivotal公司(由EMC和VMware联合成立的公司)在2015年推出的开源产品,主要对Netflix开源组件的进一步封装,方便Spring开发人员构建微服务架构的应用。
SpringCloudEureka是SpringCloudNetflix微服务套件的一部分,基于NetflixEureka做了二次封装,主要负责完成微服务实例的自动化注册与发现,这也是微服务架构中最为核心和基础的功能。
Eureka所治理的每一个微服务实例,被称之为ProviderInstance(提供者实例)。每一个ProviderInstance微服务实例包含一个EurekaClient客户端组件(相当于注册中心客户端组件),其主要的工作为:
(1)向EurekaServer完成ProviderInstance的注册、续约和下线等操作,主要的注册信息包括服务名、机器IP、端口号、域名等等。
(2)向EurekaServer获取ProviderInstance清单,并且缓存在本地。
一般来说,EurekaServer作为服务治理应用,会独立地部署和运行。一个EurekaServer注册中心应用在新建的时候,首先需要在pom.xml文件中添加上eureka-server依赖库。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
然后,需要在启动类中添加注解@EnableEurekaServer,声明这个应用是一个EurekaServer,启动类的代码如下:
packagecom.crazymaker.springcloud.cloud.center.eureka;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
importorg.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
//在启动类中添加注解@EnableEurekaServer
@EnableEurekaServer
@SpringBootApplication
publicclassEurekaServerApplication{
publicstaticvoidmain(String[]args){
SpringApplication.run(EurekaServerApplication.class,args);
}
}
然后,在应用配置文件application.yml中,对EurekaServer的一些参数进行配置。一份基础的配置文件大致如下:
server:
port:7777
spring:
application:
name:eureka-server
eureka:
client:
register-with-eureka:false
fetch-registry:false
service-url:
#服务注册中心的配置内容,指定服务注册中心的位置
defaultZone:${SCAFFOLD_EUREKA_ZONE_HOSTS:http://localhost:7777/eureka/}
instance:
hostname:${EUREKA_ZONE_HOST:localhost}
server:
enable-self-preservation:true#开启自我保护
eviction-interval-timer-in-ms:60000#扫描失效服务的间隔时间(单位毫秒,默认是60*1000)即60秒
以上的配置文件中,包含了三类配置项:作为服务注册中心的配置项(eureka.server.)、作为Provider提供者的配置项(eureka.instance.)、作为注册中心客户端组件的配置项(eureka.client.*),至于具体的原因,请参考《SpringCloudNginx高并发核心编程》一书。
配置完成后,通过运行启动类EurekaServerApplication就可以启动EurekaServer,然后通过浏览器访问EurekaServer的控制台界面(其端口为server.port配置项的值),大致如下图所示。
图:EurekaServer的控制台界面
启动Config配置中心
在采用分布式微服务架构的系统中,由于服务数量巨多,为了方便服务配置文件统一管理,所以需要分布式配置中心组件。如果各个服务的配置分散管理,则,上线之后配置的如何保持一致,将会是一个很头疼的问题。
所以,各个服务的配置定然需要集中管理。SpringCloudConfig配置中心是一个比较好的解决方案。使用SpringCloudConfig配置中心,涉及到两个部分:
(1)config-server服务端配置;(需要独立运行)
(2)config-client客户端配置。(作为组件嵌入到Provider微服务提供者)
config-server服务
通过SpringCloud构建一个config-server服务,大致需要三步。首先,在pom.xml中引入spring-cloud-config-server依赖,大致如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
其次,在所创建的SpringBoot的程序主类上,添加@EnableConfigServer注解,开启ConfigServer服务,代码如下:
@EnableConfigServer
@SpringBootApplication
public
classApplication{
​publicstaticvoidmain(String[]args){
​newSpringApplicationBuilder(Application.class).web(true).run(args);
}
}
第三步,设置属性文件的位置。SpringCloudConfig提供本地存储配置的方式。在bootstrap启动属性文件中,设置属性spring.profiles.active=native,并且设置属性文件所在的位置,大致如下:
server:
port:7788#配置中心端口
spring:
application:
name:config-server#服务名称
profiles:
active:native#设置读取本地配置文件
cloud:
config:
server:
native:
searchLocations:classpath:config/#申明本地配置文件的存放位置
配置说明:
(1)spring.profiles.active=native,表示读取本地配置,而不是从git读取配置。
(2)search-locations=classpath:config/表示查找文件的路径,在类路径的config下。
服务端的配置规则:在配置路径下,以{label}/{application}-{profile}.properties的命令规范,放置对应的配置文件。上面实例,放置了以下配置文件:
分别对通用配置common、数据库配置db、缓存配置的相关属性,进行设置。Config配置中心启动之后,使用http://${CONFIG-HOST}:${CONFIG-PORT}/{application}/{profile}[/{label}]的地址格式,可以直接访问所加载好的配置属性。
例如,访问示例中的http://192.168.233.128:7788/crazymaker/redis/dev地址,返回的配置信息如下图所示。
特别说明:SpringCloudconfig-server支持有多种配置方式,比如Git,native,SVN等。虽然官方建议使用Git方式进行配置,这里没有重点介绍Git方式,而是使用了本地文件的方式。有三个原因:
(1)对于学习或者一般的开发来说,本地的文件的配置方式更简化;
(2)生产环境建议使用Nacos,集成注册中心和配置中心,更加方便和简单;
微服务入门案例
在本书的配套源码crazy-springcloud脚手架中,设计三个Provider服务提供者:uaa-provider(用户账号与认证)、demo-provider(演示用途)、seckill-provider(秒杀服务),具体如下图所示。
图:本书的配套源码中的服务提供者
uaa-provider微服务提供者
首先,一个Provider服务提供者至少需要以下两个组件包依赖:SpringBootWEB服务组件、EurekaClient客户端组件,大致如下:
<dependencies>
<!--SpringBootWEB服务组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--EurekaClient客户端组件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
SpringBootWEB服务组件用于提供REST接口服务,EurekaClient客户端组件用于服务注册与发现。从以上的Maven依赖可以看出,在SpringCloud技术体系中,一个Provider服务提供者首先是一个SpringBoot应用,所以,在学习SpringCloud微服务技术之前,必须具备一些基本的SpringBoot开发知识。
然后,在SpringBoot应用的启动类上加上@EnableDiscoveryClient注解,用于启用EurekaClient客户端组件,启动类的代码如下:
packagecom.crazymaker.springcloud.user.info.start;
//...省略import
@SpringBootApplication
/*
*启用EurekaClient客户端组件
*/
@EnableEurekaClient
publicclassUAACloudApplication
{
publicstaticvoidmain(String[]args)
{
SpringApplication.run(UAACloudApplication.class,args);
}
}
接下来,在Provider模块(或者项目)的src/main/resources的bootstrap启动属性文件中(bootstrap.properties或bootstrap.yml),增加Provider实例相关的配置,具体如下:
spring:
application:
name:uaa-provider
server:
port:7702
servlet:
context-path:/uaa-provider
eureka:
instance:
instance-id:${spring.cloud.client.ip-address}:${server.port}
ip-address:${spring.cloud.client.ip-address}
prefer-ip-address:true#访问路径优先使用IP地址
status-page-url-path:/${server.servlet.context-path}${management.endpoints.web.base-path}/info
health-check-url-path:/${server.servlet.context-path}${management.endpoints.web.base-path}/health
client:
egister-with-eureka:true#注册到eureka服务器
fetch-registry:true#是否去注册中心获取其他服务
serviceUrl:
defaultZone:http://${EUREKA_ZONE_HOST:localhost}:7777/eureka/
在详细介绍上面的配置项之前,先启动一下Provider的启动类,控制台的日志大致如下:
...com.netflix.discovery.DiscoveryClient-DiscoveryClient_UAA-PROVIDER/192.168.233.128:7702:registeringservice...
....
...com.netflix.discovery.DiscoveryClient-DiscoveryClient_UAA-PROVIDER/192.168.233.128:7702-registrationstatus:204
如果看到上面的日志,表明Provider实例已经启动成功。可以进一步通过EurekaServer检查服务是否注册成功:打开EurekaServer的控制台界面,可以看到uua-provider的一个实例已经成功注册,具体如下图所示。
图:uua-provider实例已经在成功注册到EurekaServer
前面讲到,SpringCloud中一个Provider实例身兼两者角色:Provider服务提供者、注册中心客户端。所以,在Provider的配置文件中,包含了两类配置:Provider实例角色的相关配置、EurekaClient客户端角色的相关配置。
有关的Provider实例角色的相关配置,请参考《SpringCloudNginx高并发核心编程》一书。
uaa-provider实现一个Rest接口
以uaa-Provider的获取用户信息接口为例,进行介绍,
这里实现一个获取用户信息的接口/api/user/detail/v1,该接口的具体的代码,在uaa-Provider模块中,如下图所示:
具体的代码如下:
packagecom.crazymaker.springcloud.user.info.controller;
importcom.alibaba.fastjson.JSONObject;
importcom.crazymaker.springcloud.common.dto.UserDTO;
importcom.crazymaker.springcloud.common.result.RestOut;
importcom.crazymaker.springcloud.user.info.service.impl.FrontUserEndSessionServiceImpl;
importio.swagger.annotations.Api;
importio.swagger.annotations.ApiOperation;
importorg.springframework.security.crypto.password.PasswordEncoder;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestParam;
importorg.springframework.web.bind.annotation.RestController;
importjavax.annotation.Resource;
@Api(value="用户信息、基础学习DEMO",tags={"用户信息、基础学习DEMO"})
@RestController
@RequestMapping("/api/user")
publicclassUserController
{
@Resource
privateFrontUserEndSessionServiceImpluserService;
/**
*注入全局的加密器
*/
@Resource
PasswordEncoderpasswordEncoder;
@GetMapping("/detail/v1")
@ApiOperation(value="获取用户信息")
publicRestOut<UserDTO>getUser(@RequestParam(value="userId",required=true)LonguserId)
{
UserDTOdto=userService.getUser(userId);
if(null==dto)
{
returnRestOut.error("没有找到用户");
}
returnRestOut.success(dto).setRespMsg("操作成功");
}
@GetMapping("/passwordEncoder/v1")
@ApiOperation(value="密码加密")
publicRestOut<String>passwordEncoder(
@RequestParam(value="raw",required=true)Stringraw)
{
//passwordEncoder=PasswordEncoderFactories.createDelegatingPasswordEncoder();
Stringencode=passwordEncoder.encode(raw);
returnRestOut.success(encode);
}
}
uaa-provider的运行结果
获取用户信息:
demo-provider完成RPC远程调用
demo-provider使用Feign+Ribbon进行RPC远程调用时,对每一个Java远程调用接口,Feign都会生成了一个RPC远程调用客户端实现类,只是,该实现类对于开发者来说是透明的,开发者感觉不到这个类的存在。
需要在Maven的pom文件中,增加以下Feign+Ribbon集成模块的依赖:
<!--导入SpringCloudRibbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<!--添加Feign依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
客户端RPC实现类位于远程调用Java接口和服务提供者Provider之间,承担了以下职责:
(1)拼装REST请求:根据Java接口的参数,拼装目标REST接口的URL;
(2)发送请求和获取结果:通过JavaHTTP组件(如HttpClient)调用服务提供者Provider的REST接口,并且获取REST响应;
(3)结果解码:解析REST接口的响应结果,封装成目标POJO对象(Java接口的返回类型),并且返回。
REST服务的本地代理接口
该接口的具体的代码,在uaa-client模块中,如下图所示:
具体的代码如下:
packagecom.crazymaker.springcloud.user.info.remote.client;
importcom.crazymaker.springcloud.common.dto.UserDTO;
importcom.crazymaker.springcloud.common.result.RestOut;
importcom.crazymaker.springcloud.standard.config.FeignConfiguration;
importcom.crazymaker.springcloud.user.info.remote.fallback.UserClientFallback;
importcom.crazymaker.springcloud.user.info.remote.fallback.UserClientFallbackFactory;
importcom.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
importorg.springframework.cloud.openfeign.FeignClient;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.bind.annotation.RequestParam;
/**
*Feign客户端接口
*@description:用户信息远程调用接口
*@date2019年7月22日
*/
@FeignClient(value="uaa-provider",
configuration=FeignConfiguration.class,
fallback=UserClientFallback.class,
//fallbackFactory=UserClientFallbackFactory.class,
path="/uaa-provider/api/user")
publicinterfaceUserClient
{
/**
*远程调用RPC方法:获取用户详细信息
*@paramuserId用户Id
*@return用户详细信息
*/
@RequestMapping(value="/detail/v1",method=RequestMethod.GET)
RestOut<UserDTO>detail(@RequestParam(value="userId")LonguserId);
}
通过REST服务的本地代理接口,进行RPC调用
进行RPC调用的具体的代码,在demo-provider模块中,如下图所示:
packagecom.crazymaker.springcloud.demo.controller;
importcom.alibaba.fastjson.JSONObject;
importcom.alibaba.fastjson.TypeReference;
importcom.crazymaker.springcloud.common.dto.UserDTO;
importcom.crazymaker.springcloud.common.result.RestOut;
importcom.crazymaker.springcloud.common.util.JsonUtil;
importcom.crazymaker.springcloud.user.info.remote.client.UserClient;
importcom.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
importio.swagger.annotations.Api;
importio.swagger.annotations.ApiOperation;
importorg.springframework.boot.web.client.RestTemplateBuilder;
importorg.springframework.http.ResponseEntity;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestParam;
importorg.springframework.web.bind.annotation.RestController;
importorg.springframework.web.client.RestTemplate;
importjavax.annotation.Resource;
@RestController
@RequestMapping("/api/call/uaa/")
@Api(tags="演示uaa-provider远程调用")
publicclassUaaRemoteCallController
{
//注入@FeignClient注解配置所配置的客户端实例
@Resource
UserClientuserClient;
@GetMapping("/user/detail/v2")
@ApiOperation(value="Feign远程调用")
publicRestOut<JSONObject>remoteCallV2(
@RequestParam(value="userId")LonguserId)
{
RestOut<UserDTO>result=userClient.detail(userId);
JSONObjectdata=newJSONObject();
data.put("uaa-data",result);
returnRestOut.success(data).setRespMsg("操作成功");
}
}
demo-provider需要依赖uaa-client模块
启动demo-provider
访问swaggerui:
通过swagger执行RPC操作
ok,是不是很简单
源码请参见《SpringCloudNginx高并发核心编程》一书源码
虽然SpringCloud入门很简单,但是原理很复杂,而且掌握SpringCloud原理,是成为核心工厂师的必备知识
环境准备:
基于crazy-springcloud脚手架(其他的脚手架也类似)的微服务开发和自验证过程中,涉及到的基础中间件大致如下:
(1)ZooKeeper
ZooKeeper是一个分布式的、开放源码的分布式协调应用程序,是大数据框架Hadoop和Hbase的重要组件。在分布式应用中,它能够高可用地提供很多保障数据一致性的基础能力:分布式锁、选主、分布式命名服务等。
在crazy-springcloud脚手架中,高性能分布式ID生成器用到了ZooKeeper。有关其原理和使用,请参见《NettyZookeeperRedis高并发实战》一书。
(2)Redis
Redis是一个高性能的缓存数据库。在高并发的场景下,Redis可以对关系数据库起到很好的缓冲作用;在提高系统的并发能力和响应速度方面,Redis举足轻重和至关重要。crazy-springcloud脚手架的分布式Session用到了Redis。有关Redis的原理和使用,还是请参见《NettyZookeeperRedis高并发实战》一书。
(3)Eureka
Eureka是Netflix开发的服务注册和发现框架,本身是一个REST服务提供者,主要用于定位运行在AWS(Amazon云)的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务注册和发现功能。
(4)SpringCloudConfig
SpringCloudConfig是SpringCloud全家桶中最早的配置中心,虽然在生产场景中,很多的企业已经使用Nacos或者Consul整合型的配置中心替代了独立的配置中心,但是Config依然适用于SpringCloud项目,通过简单的配置即可使用。
(5)Zuul
Zuul是Netflix开源网关,可以和Eureka、Ribbon、Hystrix等组件配合使用,SpringCloud对Zuul进行了整合与增强,使用其作为微服务集群的内部网关,负责对给集群内部各个provider服务提供者进行RPC路由和请求过滤。
以上中间件的端口配置,以及部分安装和使用视频,大致如下表所示。
中间件 | 链接地址 |
---|---|
LinuxRedis安装(带视频) | LinuxRedis安装(带视频) |
LinuxZookeeper安装(带视频) | LinuxZookeeper安装,带视频 |
....完整的开发环境的准备工作,-> | 请去疯狂创客圈博客园总入口 |
。。。。 |
回到◀疯狂创客圈▶
疯狂创客圈-Java高并发研习社群,为大家开启大厂之门
本文内容总结:推荐:地表最强开发环境系列,推荐:springCloud微服务系列,SpringCloud全家桶简介,SpringCloud开发脚手架,启动EurekaServer注册中心,启动Config配置中心,config-server服务,微服务入门案例,uaa-provider微服务提供者,uaa-provider实现一个Rest接口,uaa-provider的运行结果,demo-provider完成RPC远程调用,REST服务的本地代理接口,通过REST服务的本地代理接口,进行RPC调用,启动demo-provider,通过swagger执行RPC操作,环境准备:,回到◀疯狂创客圈▶,
原文链接:https://www.cnblogs.com/crazymakercircle/p/14017169.html