# 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的项目学习音频资料搭建