springcloud项目快速开始起始模板的实现

网友投稿 201 2022-09-11


springcloud项目快速开始起始模板的实现

目录1.创建实体类模块2.创建配置中心,搭建注册中心集群3.创建网关(修改版本号)4.搭建配置中心5.构思需要的微服务(每个微服务既可以是提供者也可以是消费者)6.依赖引入完毕,以上全部微服务创建出来后修改位置

1.创建实体类模块

引入依赖(这里使用tkmybatis的依赖)

org.projectlombok

lombok

1.18.20

tk.mybatis

mapper-spring-boot-starter

2.0.2

效果如下

2.创建配置中心,搭建注册中心集群

选择依赖(修改spring cloud版本号)

修改application.yml搭建server集群 此处要注意域名解析peer1,peer2,peer3

server:

port: 9004

spring:

application:

name: euraka-server

eureka:

client:

service-url:

#如果是集群,,后面用逗号隔开

defaultZone: http://127.0.0.1:9004/eureka

#自己本身就是服务注册中心,声明不注册自己

register-with-eureka: false

#声明自己不拉取自己的服务注册列表

fetch-registry: false

instance:

# ⼼跳间隔时间

lease-renewal-interval-in-seconds: 30

# 没收到⼼跳多⻓时间剔除

lease-expiration-duration-in-seconds: 90

server:

enable-self-preservation: false # 关闭⾃我保护模式(缺省为打开)

eviction-interval-timer-in-ms: 1000 # 扫描失效服务的间隔时间(缺省为60*1000ms)

logging:

level:

com.netflix: warn

---

spring:

config:

activate:

on-profile: peer1

server:

port: 9003

eureka:

instance:

hostname: peer1

client:

service-url:

defaultZone: http://peer2:9004/eureka,http://peer3:9005/eureka

---

spring:

config:

activate:

on-profile: peer2

server:

port: 9004

eureka:

instance:

hostname: peer2

client:

service-url:

defaultZone: http://peer1:9003/eureka,http://peer3:9005/eureka

---

spring:

config:

activate:

on-profile: peer3

server:

port: 9005

eureka:

instance:

hostname: peer3

client:

service-url:

defaultZone: http://peer1:9003/eureka,http://peer2:9004/eureka

启动器加@EnableEurekaServer注解

3.创建网关(修改版本号)

网关yml配置文件

server:

port: 9006

spring:

application:

name: api-gateway

cloud:

gateway:

routes:

- id: service

uri: http://127.0.0.1:9001

predicates:

- Path=/pay/{segment}

filters:

- name: CircuitBreaker

args:

name: backendA

fallbackUri: forward:/fallbackA

#全部允许跨域访问

globalcors:

cors-configurations:

'[/**]':

allowed-origin-patterns: "*" # spring boot2.4配置

# allowed-origins: "*"

allowed-headers: "*"

allow-credentials: true

allowed-methods:

- GET

- POST

- DELETE

- PUT

- OPTION

eureka:

client:

service-url:

defaultZone: http://127.0.0.1:9004/eureka

#网关熔断,快速降级

resilience4j:

circuitbreaker:

configs:

default:

failureRateThreshold: 30 #失败请求百分比,超过这个比例,CircuitBreaker变为OPEN状态

slidingWindowSize: 10 #滑动窗口的大小,配置COUNT_BASED,表示10个请求,配置TIME_BASED表示10秒

minimumNumberOfCalls: 5 #最小请求个数,只有在滑动窗口内,请求个数达到这个个数,才会触发CircuitBreader对于断路器的判断

slidingWindowType: TIME_BASED #滑动窗口的类型

permittedNumberOfCallsInHalfOpenState: 3 #当CircuitBreaker处于HALF_OPEN状态的时候,允许通过的请求个数

automaticTransitionFromOpenToHalfOpenEnabled: true #设置true,表示自动从OPEN变成HALF_OPEN,即使没有请求过来

waitDurationInOpenState: 2s #从OPEN到HALF_OPEN状态需要等待的时间

recordExceptions: #异常名单

- java.lang.Exception

instances:

backendA:

baseConfig: default

backendB:

failureRateThreshold: 50

slowCallDurationThreshold: 2s #慢调用时间阈值,高于这个阈值的呼叫视为慢调用,并增加慢调用比例。

slowCallRateThreshold: 30 #慢调用百分比阈值,断路器把调用时间大于slowCallDurationThreshold,视为慢调用,当慢调用比例大于阈值,断路器打开,并进行服务降级

slidingWindowSize: 10

slidingWindowType: TIME_BASED

minimumNumberOfCalls: 2

permittedNumberOfCallsInHalfOpenState: 2

waitDurationInOpenState: 120s #从OPEN到HALF_OPEN状态需要等待的时间

创建网关熔断对应降级方法

@RestController

@Slf4j

public class FallbackController {

@GetMapping("/fallbackA")

public ResponseEntity fallbackA() {

return ResponseEntity.ok("服务不可用,降级");

}

}

启动器加@EnableDiscoveryClient 或@EnableEurekaClient注解

还可以在网关中设置全局或局部过滤器

4.搭建配置中心

添加依赖()另加下面依赖实现git仓库自动刷新,需要配合rabbitmq使用,需要内网穿透

org.springframework.cloud

spring-cloud-starter-bus-amqp

org.springframework.boot

spring-boot-starter-actuator

yml配置文件(可以更改本地作为配置中心)

server:

port: 9007

spring:

rabbitmq:

host: 127.0.0.1

port: 5672

username: guest

password: guest

application:

name: cloud-config

cloud:

config:

server:

git:

uri: https://gitee.com/zhaoy999/springcloud_config.git

search-paths: config

default-label: master

#配置中心设在本地使用

# profiles:

# active: native

# cloud:

# config:

# server:

# native:

# search-locations: classpath:/config

eureka:

client:

service-url:

defaultZone: http://127.0.0.1:9004/eureka

#git仓库配置中心自动刷新

management:

endpoints:

web:

exposure:

include: bus-refresh

endpoint:

bus-refresh:

enabled: true

在已经指定好的仓库config目录下创建配置文件

5.构思需要的微服务(每个微服务既可以是提供者也可以是消费者)

引入依赖(需要另外引入下面代码块的依赖)

!!!修改,先不要加sleuth依赖,会报错

这里使用的tkmybatis操作持久层

org.springframework.amqp

spring-rabbit

io.github.resilience4j

resilience4j-ratelimiter

1.7.0

io.github.resilience4j

resilience4j-bulkhead

1.7.0

org.springframework.cloud

spring-cloud-starter-bus-amqp

org.springframework.boot

spring-boot-starter-actuator

org.springframework.boot

spring-boot-starter-jdbc

org.springframework.boot

spring-boot-starter-test

tk.mybatis

mapper-spring-boot-starter

2.0.2

com.github.pagehelper

pagehelper

5.1.11

org.springframework.boot

spring-boot-starter-thymeleaf

com.github.pagehelper

pagehelper-spring-boot-starter

1.2.3

yml基本配置:

连接eureka注册中心:启动器加@EnableDiscoveryClient 或@EnableEurekaClient注解

端口号,服务名,连接配置中心:本地application.yml

链路追踪配置:git仓库config目录下application.yml

rabbitmq消息接收配置:git仓库config目录下application.yml

选择性配置feign:git仓库config目录下application.yml

熔断,隔离,限流:git仓库config目录下application.yml

数据库连接::git仓库config目录下application.yml

本地application.yml

server:

port: ${port:9001}

spring:

application:

name: pay-service

cloud:

config:

uri: http://localhost:9007

profile: default

label: master

config:

import: optional:configserver:http://localhost:9007

git仓库config目录下application.yml

spring:

zipkin:

base-url: http://localhost:9411

sender:

type: web

sleuth:

sampler:

probability: 1

rabbitmq:

host: 127.0.0.1

port: 5672

username: guest

password: guest

eureka:

client:

service-url:

defaultZone: http://peer1:9003/eureka,http://peer2:9004/eureka,http://peer3:9005/eureka

feign:

client:

config:

default:

connectTimeout: 5000 #防止由于服pNbuZQ务器处理时间长而阻塞调用者

readTimeout: 5000 #从连接建立时开始应用,在返回响应时间过长时触发

circuitbreaker:

enabled: true

compression:

request:

enabled: true # 请求压缩

mime-types: text/xml,application/xml,application/json # 压缩的类型

min-request-size: 2048 # 请求最小压缩的阈值

response:

enabled: true #响应压缩

useGzipDecoder: true #使用gzip解码器解码响应数据

logging:

level:

com.zhao: debug

#设置自己作为断路器

resilience4j:

circuitbreaker:

configs:

default:

failureRateThreshold: 30 #失败请求百分比,超过这个比例,CircuitBreaker变为OPEN状态

slidingWindowSize: 10 #滑动窗口的大小,配置COUNT_BASED,表示10个请求,配置TIME_BASED表示10秒

minimumNumberOfCalls: 5 #最小请求个数,只有在滑动窗口内,请求个数达到这个个数,才会触发CircuitBreader对于断路器的判断

slidingWindowType: TIME_BASED #滑动窗口的类型

permittedNumberOfCallsInHalfOpenState: 3 #当CircuitBreaker处于HALF_OPEN状态的时候,允许通过的请求个数

automaticTransitionFromOpenToHalfOpenEnabled: true #设置true,表示自动从OPEN变成HALF_OPEN,即使没有请求过来

waitDurationInOpenState: 2s #从OPEN到HALF_OPEN状态需要等待的时间

recordExceptions: #异常名单

- java.lang.Exception

instances:

backendA:

baseConfig: default #熔断器backendA,继承默认配置default

backendB:

failureRateThreshold: 50

slowCallDurationThreshold: 2s #慢调用时间阈值,高于这个阈值的呼叫视为慢调用,并增加慢调用比例。

slowCallRateThreshold: 30 #慢调用百分比阈值,断路器把调用时间大于slowCallDurationThreshold,视为慢调用,当慢调用比例大于阈值,断路器打开,并进行服务降级

slidingWindowSize: 10

slidingWindowType: TIME_BASED

minimumNumberOfCalls: 2

permittedNumberOfCallsInHalfOpenState: 2

waitDurationInOpenState: 2s #从OPEN到HALF_OPEN状态需要等待的时间

bulkhead:

configs:

default:

maxConcurrentCalls: 5 # 隔离允许并发线程执行的最大数量

maxWaitDuration: 20ms # 当达到并发调用数量时,新的线程的阻塞等待的最长时间

instances:

backendA:

baseConfig: default

backendB:

maxWaitDuration: 10ms

maxConcurrentCalls: 20

#线程池隔离()

thread-pool-bulkhead:

configs:

default:

maxThreadPoolSize: 4 # 最大线程池大小

coreThreadPoolSize: 2 # 核心线程池大小

queueCapacity: 2 # 队列容量

instances:

backendA:

baseConfig: default

backendB:

maxThreadPoolSize: 1

coreThreadPoolSize: 1

queueCapacity: 1

#微服务限流

ratelimiter:

configs:

default:

timeoutDuration: 5 # 线程等待权限的默认等待时间

limitRefreshPeriod: 1s # 限流器每隔1s刷新一次,将允许处理的最大请求重置为2

limitForPeriod: 2 #在一个刷新周期内,允许执行的最大请求数

instances:

backendA:

baseConfig: default

backendB:

timeoutDuration: 5

limitRefreshPeriod: 1s

limitForPeriod: 5

实现微服务的负载均衡(有使用resttemplate和使用openfeign两种方式),这里直接使用restTemplate,在消费者启动器类里引入restTemplate Bean类,加上@loadbalanced注解就可以用了

@EnableDiscoveryClient

@SpringBootApplication

public class OrderApplication {

public static void main(String[] args) {

SpringApplication.run(OrderApplication.class, args);

}

@Bean

@LoadBalanced

public RestTemplate restTemplate(){

return new RestTemplate();

}

}

使用方法示例:

@Autowired

private RestTemplate restTemplate;

@Autowired

DiscoveryClient discoveryClient;

@GetMapping("/pay/{id}")

@RateLimiter(name = "backendA", fallbackMethod = "fallback")

public ResponseEntity getPaymentById(@PathVariable("id") Integer id) throws InterruptedException, ExecutionException {

log.info("now i enter the method!!!");

// Thread.sleep(10000L); //阻塞10秒,已测试慢调用比例熔断

String url = "http://pay-service/pay/" + id;

Payment payment = restTemplate.getForObject(url, Payment.class);

log.info("now i exist the method!!!");

return ResponseEntity.ok(payment);

}

6.依赖引入完毕,以上全部微服务创建出来后修改位置

启动器加启动器加@EnableDiscoveryClient 或@EnableEurekaServer

逐个修改yml文件,修改端口号和服务名

打开services,方便同时打开多个服务

配置中心加@EnableConfigServer

修改仓库配置文件

添加本项目实体类依赖

打开rabbitmq,打开方法参考我的另一篇博客rabbitmq安装全过程[含安装包,可直接用

打开链路追踪控制台

开始写逻辑代码;


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:解析浮动许可证优势及许可证优化价值
下一篇:如何提升学生网络安全素养?(如何提高学生网络安全意识)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~