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

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

1.创建实体类模块

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

  <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.2</version>
        </dependency>
    </dependencies>

效果如下

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使用,需要内网穿透

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

 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操作持久层

<!--使用rabbitmq链路追踪,接收rabbitmq队列消息,实现配置的自动刷新-->
 <dependency>
        <groupId>org.springframework.amqp</groupId>
        <artifactId>spring-rabbit</artifactId>
    </dependency>
<!--微服务限流-->
    <dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-ratelimiter</artifactId>
        <version>1.7.0</version>
    </dependency>
<!-- 信号量隔离-->
    <dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-bulkhead</artifactId>
        <version>1.7.0</version>
    </dependency>

<!-- 配置自动刷新,需要配合@RefreshScope注解-->
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
<!-- 可不用-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
<!--数据库连接-->
  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
<!--tkmybatis-->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.2</version>
        </dependency>
<!--PageHelper分页插件-->
<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.11</version>
        </dependency>
<!--前后端分离使用的thymeleaf-->
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
<!--tkmybatis使用,增强mybatis不能用-->
 <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>

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 #防止由于服务器处理时间长而阻塞调用者
        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<Payment> 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安装全过程[含安装包,可直接用
打开链路追踪控制台
开始写逻辑代码;

到此这篇关于springcloud项目快速开始起始模板的实现的文章就介绍到这了,更多相关springcloud 起始模板 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Spring Cloud中使用jib进行docker部署的步骤详解

    Jib介绍 Jib 是 Google 开发的可以直接构建 Java 应用的 Docker 和 OCI 镜像的类库,以 Maven 和 Gradle 插件形式提供. 通过 Jib,Java 开发者可以使用他们熟悉的 Java 工具来构建容器.Jib 是一个快速而简单的容器镜像构建工具,它负责处理将应用程序打包到容器镜像中所需的所有步骤.它不需要你编写 Dockerfile 或安装 Docker,而且可以直接集成到 Maven 和 Gradle中 -- 只需要将插件添加到构建中,就可以立即将 Jav

  • SpringCloud可视化链路追踪系统Zipkin部署过程

    1.前提 已经配置Sleuth,可参考 https://www.jb51.net/article/182889.htm 2.什么是Zipkin? 官网:https://zipkin.io/ 大规模分布式系统的APM工具( Application Performance Management),基于 Google Dapper的基础实现,和 sleuth结合可以提供可视化web界面分析调用链路耗时情况 同类产品 鹰眼( Eag leYe) CAT twitter开源 zipkin,结合 sleut

  • 详解spring cloud config实现datasource的热部署

    关于spring cloud config的基本使用,前面的博客中已经说过了,如果不了解的话,请先看以前的博客 spring cloud config整合gitlab搭建分布式的配置中心 spring cloud config分布式配置中心的高可用 今天,我们的重点是如何实现数据源的热部署. 1.在客户端配置数据源 @RefreshScope @Configuration// 配置数据源 public class DataSourceConfigure { @Bean @RefreshScope

  • Spring Cloud Ubuntu环境部署的步骤与注意事项

    SpringCloud相关环境部署 RabbitMQ部署 Redis部署 Nacos部署 RabbitMQ 不采用更新安装包方式安装  apt-get install .采用从官网下载对应版本安装包,采用命令方式安装. 安装RabbitMQ之前,需要Erlang环境的支持,需要下载与之对应的Erlang版本的包. Erlang 为了避免版本冲突,我首先删除之前的erlang环境,apt-remove erlang,但这样还是完全清理干净. Ubuntu下删除erlang 1.which erl

  • Docker一键部署springcloud项目的方法

    目录 docker下载的镜像 启动mysql和nacos 修改自己的java项目 打包 上传Linux系统 启动 遇到的一些问题: 其他错误 docker下载的镜像 1.下载nacos docker pull nacos:[版本号] 2.下载mysql docker pull mysql:[版本号] 3.安装docker-compose Linux下需要通过命令下载: # 安装 curl -L https://github.com/docker/compose/releases/download

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

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

  • 使用Idea简单快速搭建springcloud项目的图文教程

    前言: 开发工具:IntelliJ IDEA 2020版 (Ultimate Edition) 框架:spring boot .spring cloud 搭建一套spring cloud微服务系统,实现服务之间的调用. 需要搭建一个父工程springcloud-test,一个服务注册中心eureka-server,两个微服务cloud-client,cloud-provider. 两个微服务均注册到服务注册中心. 一.搭建父项目 2. 3. (1)删掉src目录 (2)定义pom.xml文件 <

  • 新手学习微服务SpringCloud项目架构搭建方法

    这篇文章主要介绍了新手学习微服务SpringCloud项目架构搭建方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Spring的微服务框架SpringCloud受到众多公司欢迎,给大家带来一篇框架搭建入门.本次采用的版本是Spring Cloud版本为Finchley.RELEASE. 一.SpringCloud项目简介 spring cloud: 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.

  • SpringBoot+MyBatisPlus+Vue 前后端分离项目快速搭建过程(后端)

    数据库准备 data_test.sql: /* SQLyog Enterprise v12.08 (64 bit) MySQL - 5.7.31 : Database - data_test ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_

  • 一个简单的SpringBoot项目快速搭建详细步骤

    目录 前言 第一步新建项目 第二步导入依赖 第三步配置Application 第四步创建需要的mapper.service.cotroller层 创建需要的文件夹 创建数据库 创建pojo类 创建mapper接口 创建对于mapper接口的xml文件 创建service层 创建controller层 第五步测试请求 总结 前言 本文章仅供大家参考,如果对大家有起到帮助的话可以点赞支持一下~ 主要发布是为了本人以后能方便的搭建一个SpringBoot项目的框架!!! 源码路径在文章最下方! 第一步

  • 详解在 Angular 项目中添加 clean-blog 模板

    在 Angular 项目中添加 clean-blog 模板 clean-blog 博客模板下载 clean-blog 或者在下面链接下载 startbootstrap-clean-blog-4-dev.zip 解压并拷贝 解压下载的文件,将所有文件拷贝到 assets/clean-blog 目录下 拷贝代码 将 clean-blog 的 index.html 内容拷贝到 app.component.html <!--The whole content below can be removed w

  • SpringCloud项目集成Feign、Hystrix过程解析

    这篇文章主要介绍了SpringCloud项目集成Feign.Hystrix过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Feign的功能:这是个消费者,根据服务注册在Eureka的ID去找到该服务,并调用接口 Hystrix的功能:熔断器,假如A服务需要调用B服务的/cities接口获取数据,那就在A服务的controller里声明@HystrixCommand,如果B服务的/cities接口挂了,就返回一个自定义的值 项目结构 [r

  • spring boot 项目中使用thymeleaf模板的案例分析

    准备 MySql数据库,表Prereg,IDEA 数据库中的表如下所示: IDEA目录结构如下: 添加thymeleaf依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 开始添加代码: 在controller包添加类"

  • idea创建springboot项目和springcloud项目的详细教程

    一:创建springboot项目 1.选择File –> New –> Project –>Spring Initialer –> 点击Next 2.填写项目相关的信息,–>点击next 3.选择web –> web,–>点击next 4.填写项目名和项目位置,–>点击finish 5.会自动生成一个Application类,加上一个@RestController注解就可以写方法了 6.启动Application类中的main()方法,浏览器输入localh

  • springcloud项目占用内存好几个G导致服务器崩溃的问题

    问题描述 springcloud项目部署或调试时,占用的内存特别多.当部署到服务器上去后,有可能导致服务器内存占用过多而崩溃. 解决方案 1.本地调试时,IDEA中添加参数以减少本地内存使用 按照下图点击,添加参数 -Xms64m -Xmx128m 2.远程上线时,命令行添加参数 2.1单个服务直接部署 例如使用nohup执行时,在java与-jar之间添加参数-Xms64m -Xmx128m nohup java -Xms64m -Xmx128m -jar x.xx-xx.jar & 2.2对

随机推荐