# SpringCloudScaffold
**Repository Path**: ArnoldSu/SpringCloudScaffold
## Basic Information
- **Project Name**: SpringCloudScaffold
- **Description**: SpringCloud脚手架,开箱即用!!!
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2020-04-13
- **Last Updated**: 2022-05-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
1 添加依赖
org.springframework.boot
spring-boot-starter-parent
2.2.1.RELEASE
org.springframework.cloud
spring-cloud-dependencies
Hoxton.SR1
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.1.0.RELEASE
pom
import
mysql
mysql-connector-java
${mysql.version}
junit
junit
${junit.version}
test
log4j
log4j
${log4j.version}
com.alibaba
druid
${druid.version}
org.mybatis.spring.boot
mybatis-spring-boot-starter
${mybati.spring.boot.version}
io.springfox
springfox-swagger2
2.9.2
io.springfox
springfox-swagger-ui
2.9.2
cn.hutool
hutool-all
5.2.3
2 抽离公共模块
cloud-api-common
引入所有项目要用到的依赖并且在其他项目引入该模块
3 服务注册发现
Eureka
服务端依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
新建项目cloud-eureka-server
添加相关配置 service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置Eureka server 交互的地址查询服务和注册服务的地址
将其他服务注册到server
把provider-service-8080 到cloud-eureka-server
添加pom客户端依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
Nacos
装好Nacos服务端(可用docker)
添加依赖
4 OperFeign集成(Feign停更)
添加依赖
org.springframework.cloud
spring-cloud-starter-openfeign
编写相应的service 封装对于provider的接口操作
注解不要引入错了,配置好超时时间,不然容易出现错误
超时配置
feign:
httpclient:
connection-timeout: 10000
5 Hystrix 熔断器(后续已经停更)
添加依赖
org.springframework.cloud
spring-cloud-starter-netflix-hystrix
服务降级一般放在客户端调用
主要配置注解
@EnableHystrix
简单配置使用
//模拟服务降级处理
@HystrixCommand(fallbackMethod = "fallback",
commandProperties = {@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="3000")})
全局配置使用
@DefaultProperties
注意回调函数参数列表的问题
解耦
实现FeignClient的接口,统一实现一个回调函数
@FeignClient(value = "PROVIDER-SERVICE-8080",fallback = ConsumerServiceImpl.class)
修改配置
feign:
httpclient:
connection-timeout: 10000
hystrix:
enabled: true
服务熔断(另一种更友好的服务降级机智)
具体步奏就是服务降级->熔断->恢复调用链路
//模拟服务熔断处理
@HystrixCommand(fallbackMethod = "fallbackGetUserById",
commandProperties = {
@HystrixProperty(name="circuitBreaker.enabled",value="true"), //开启断路器
@HystrixProperty(name="circuitBreaker.requestVolumeThreshold",value="10"), //请求次数
@HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds",value="10000"), //休眠窗口时间
@HystrixProperty(name="circuitBreaker.errorThresholdPercentage",value="60") //失败率达到多少触发服务熔断
})
打开hystrix的监控画面
引入依赖
org.springframework.boot
spring-boot-actuator
org.springframework.cloud
spring-cloud-starter-netflix-hystrix-dashboard
启动类添加这个Springboot2.0之后添加的
@Bean
public ServletRegistrationBean getServlet() {
HystrixMetricsStreamServlet streamServlet =new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean =new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}
打开注解@EnableHystrixDashboard
访问web界面地址:http://localhost:8080/hystrix
监控查看URL:localhost:8080/hystrix.stream
6 网关(zuul(停更),gateway)
Route(路由) id与目标URI,一列的断言和过滤器组成,断言为true匹配该路由
Predicate(断言) java8,请求断言匹配路由
Filter(过滤) spring的GatewayFilter实例
引入依赖
org.springframework.cloud
spring-cloud-starter-gateway
添加配置(静态路由)
cloud:
gateway:
routes:
- id: consumer_route
uri: http://localhost:8080
predicates:
- Path=/get/**
动态路由
cloud:
gateway:
routes:
- id: consumer_route
uri: lb://provider-service-8080
predicates:
- Path=/get/**
discovery:
locator:
enabled: true
过滤器配置
实现这个接口GlobalFilter
7 config
添加依赖
org.springframework.cloud
spring-cloud-config-server
在码云上新建一个配置项目
添加配置
cloud:
config:
server:
git:
uri: https://gitee.com/ArnoldSu/Spring-Cloud-Config.git #git地址
#搜索目录
search-paths:
- Spring-Cloud-Config
label: master #读取分支
测试访问:http://localhost:3344/master/application-dev.yml
其他微服务统一添加config客户段依赖实现中心化配置(手动post刷新配置)
添加依赖
org.springframework.cloud
spring-cloud-starter-config
org.springframework.boot
spring-boot-starter-actuator
新增一个bootstrap.yml 配置文件
#端口配置
server:
port: 80
spring:
application:
name: cloud-basic-service
cloud:
config:
label: master #分支名称
name: cloud-basic-service-config #配置文件名称
profile: dev #读取后缀名称
uri: http://localhost:3344 #配置中心地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/ #设置Eureka server地址
management:
endpoints:
web:
exposure:
include: "*"
8 bus
广播刷新配置
在cloud-config-service 添加总线依赖(支持rabbitmq和kafka,这里用rabbit)
org.springframework.cloud
spring-cloud-starter-bus-amqp
添加rabbitmq配置信息
#端口配置
server:
port: 3344
spring:
application:
name: cloud-config-service
cloud:
config:
server:
git:
uri: https://gitee.com/ArnoldSu/Spring-Cloud-Config.git #git地址
#搜索目录
search-paths:
- Spring-Cloud-Config
label: master #读取分支
rabbitmq: #总线rabbit配置
host: 159.138.20.29
username: guest
password: guest
port: 5672
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/ #设置Eureka server地址
#暴露bus刷新端点
management:
endpoints:
web:
exposure:
include: 'bus-refresh'
在运用到config配置文件的客户端也要添加bus依赖,以及rabbit的相关配置(依赖要用2.2.2-release,不然找不到mq的依赖)
9 Stream
构建消息驱动的微服务框架
新增依赖
org.springframework.cloud
spring-cloud-starter-stream-rabbit
新增配置生产者方
cloud:
stream:
binders: #在此配置要绑定的rabbitmq的服务信息
defaultRabbit: #表示定义的名称,用于binding的整合
type: rabbit #消息组件类型
environment: #设置rabbitmq的相关环境配置
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
bindings: #服务的整合处理
output: #这个名字是一个通道的名称
destination: studyExchange #表示要使用的Exchange名称定义
content-type: application/json #设置消息类型,本次为json,文本则设置“text/plain”
binder: defaultRabbit #设置要绑定的消息服务的具体设置
本项目所有项目框架都以尚硅谷周阳老师2020最新版Spring Cloud的项目学习音频资料搭建