0


spring cloud环境搭建,Eureka集群,Ribbon负载均衡

搭建环境:jdk1.8,Hoxton.SR8,springboot2.2.2,mysql8
开发工具:idea,maven

我们首先了解什么是spring cloud:

  • SpringCloud体系结构图:
  • API GateWay:网关。所有的请求进来先进入网关,网关负责怎么处理。
  • dashboard:服务出现问题了该怎么处理。
  • microservices:微服务
  • Service registry:注册中心
  • SpringCloud,基于Springboot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。 Dubbo SpringCloud服务注册中心 Zookeeper SpringCloud NetFix Eurrka服务调用方式 RPC Rest API服务监控 Dubbo-monitor SpringBoot Admin断路器 不完善 SpringCloud NetFix Hystrix服务网关 无 SpringCloud NetFix Zuul分布式配置 无 SpringCloud Config数据线 无 SpringCloud Stream批量任务 无 SpringCloud Task
  • SpringCloud为开发人员提供了构建分布式系统的一些工具,包括配置管理,服务发现,断路器,路 由,微代理,事件总线,全局锁,决策竞选,分布式会话。都以通过Springboot开发风格做到一键启动 和部署。

创建最外层项目,父项目

首先创建一个普通的空项目
在空项目里面添加模块,一会所有的项目都在这里搭建:
在这里插入图片描述
我们首先添加pom依赖:
由于把src删除了所以刷新maven是无效的,可以先把依赖下载完再删除是src目录

<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR8</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.2.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.21</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.10</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version></dependency></dependencies></dependencyManagement>

然后点击新建创建module名为springcloud-api的实体管理
在这里插入图片描述
在新创建的模块添加依赖用来生成实体类方法

<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency></dependencies>

注意目录结构本模块只管理实体类
在这里插入图片描述

同上我们再创建一个生产者类

为具体访问的模块

在这里插入图片描述
所需依赖如下:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.7.RELEASE</version></dependency><dependency><groupId>com.hyx.springcloud</groupId><artifactId>springcloud-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency></dependencies>

按照普通的springboot项目创建分层结构,实体类不用创建我们只需要引入即可,上面的maven依赖已将将实体引入
在这里插入图片描述
这是application.yml配置文件的内容
注意数据库等信息修改

server:
  port: 8001
spring:
  application:
    name: springcloud-provider-dept
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3307/db01?serverTimezone=UTC
    username: root
    password: 123456
mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001:7001/eureka/,http://eureka7002:7002/eureka/,http://eureka7002:7002/eureka/,
  instance:
    instance-id: provider-dept:8001

启动类需要加入eureka注解 @EnableEurekaClient 这样注册中心才能发现这个类
在这里插入图片描述
下面开始编写注册中心

  • 这三个eureka注册中心内容基本一样但是要相互注册这样才能保证高可用
  • 注册中心主要是保证负载均衡的高可用,当一个服务挂掉以后会将这个服务从注册表中删掉
  • 其中有一个心跳机制,超过30秒无心跳将会认为服务挂掉了
  • eureka也有一个可视化页面,可以直观的看到注册服务

在这里插入图片描述
首先创建目录结构
在这里插入图片描述
添加maven依赖,就一个eureka依赖

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId><version>1.4.7.RELEASE</version></dependency></dependencies>

然后是7001的application.yml文件

server:
  port: 7001

eureka:
  client:
    fetch-registry: false #false自己为注册中心
    register-with-eureka: false #是否向注册中心注册自己
    service-url:
    #单机操作
#      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/   
#集群
      defaultZone: http://eureka7002:7002/eureka/,http://eureka7003:7003/eureka/
  instance:
    hostname: eureka7001

这里有一个集群操作,其他注册中心按照这个写就行,只需要改一下Url就行

启动类需要加一个**@EnableEurekaServer**注解
注册中心启动类
然后需要编写一个80模块进行通信,两种方式

  • restTemplate,利用模板进行通信
  • Feign:进行通信需要修改实体类@FeignClient
  • 以上两种方法我都写,用一种即可方法一 无需添加实体类任何东西,只要添加新的模块即可在这里插入图片描述 首先还是修改pom.xml文件
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.hyx.springcloud</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.4.7.RELEASE</version>
        </dependency>

    </dependencies>

然后需要建一个config文件夹
下面编写:
在这里插入图片描述
大家注意哈,开启负载均衡一定要编写多个生产者,也就是8001,8002,8003
基本一致,我只说不一样的地方:

- List item
然后编写80的controller层
先创建一个controller
代码如下:正常的controller层代码

packagecom.hyx.springcloud.controller;importcom.hyx.springcloud.entity.Dept;importcom.hyx.springcloud.service.MyApiService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;importjava.util.List;/**
 * @author hyx
 * @date 2024/7/17
 * @since JDK 1.8
 */@RestController@RequestMapping("/dept")publicclassDeptController{@AutowiredprivateMyApiService myApiService;@PostMapping("/findAll")publicList<Dept>findAllDept(){return myApiService.findAllDept();}@GetMapping("/findById/{id}")publicDeptfindByIdDept(@PathVariable("id")Integer id){return myApiService.findById(id);}@PostMapping("/add")publicintaddDept(@RequestBodyDept dept){return myApiService.addDept(dept);}}

80的启动类编写如下
在这里插入图片描述
在电脑上找到这个文件进行修改,在最下边添加如下东西:
127.0.0.1 eureka7001
127.0.0.1 eureka7002
127.0.0.1 eureka7003
大家一定要添加不要觉得没用,因为配置文件已经填写了
在这里插入图片描述

然后启动7001,7002,7003,80,8001,8002,8003,七个服务,可以少启动,启动一个7001,另外两个7002,7003不启动也可以看到效果
出现这个页面看到也就成功了
在这里插入图片描述
然后访问80里面的链接
每次访问都是不一样的数据库
在这里插入图片描述
方式二
和方式一区别不大,我们重新建一个模块,也可以在原来模块基础上修改

Riboon负载均衡就是@LoadBalanced开启的
在这里插入图片描述
我们需要修改的有config文件夹和controller文件夹还有APi模块实体类模块添加一个service层
Controller层需要修改成Service是api模块提供的

packagecom.hyx.springcloud.controller;importcom.hyx.springcloud.entity.Dept;importcom.hyx.springcloud.service.MyApiService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;importjava.util.List;/**
 * @author hyx
 * @date 2024/7/17
 * @since JDK 1.8
 */@RestController@RequestMapping("/dept")publicclassDeptController{@AutowiredprivateMyApiService myApiService;@PostMapping("/findAll")publicList<Dept>findAllDept(){return myApiService.findAllDept();}@GetMapping("/findById/{id}")publicDeptfindByIdDept(@PathVariable("id")Integer id){return myApiService.findById(id);}@PostMapping("/add")publicintaddDept(@RequestBodyDept dept){return myApiService.addDept(dept);}}

APi添加下面依赖

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId><version>1.4.7.RELEASE</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency></dependencies>

在这里插入图片描述
至于其他的dept实体和上面都一样

到目前为止基本的spring cloud已经搭建完毕,有注册中心,被注册的服务层,和调用者客户端成,负载均衡都结束了
hystrix服务提供了服务熔断,服务降级,和监控

我们再建一个模块进行hystrix模块
我们把8001模块进行复制粘贴

添加以下依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId><version>1.4.7.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>

我们在需要熔断的服务添加下面内容,处理方法就是一个备选,当无错误的时候正常访问数据,当出现错误时hystrix就会进行熔断,启动备用方法返回客户端
在这里插入图片描述

在这里插入图片描述

具体效果如下:
在这里插入图片描述
服务降级就是当服务宕机或者手动把不重要的服务资源停掉,交给重要的服务,需要修改API模块
在这里插入图片描述
添加一个工厂然后把工厂交给service层:
在这里插入图片描述
然后我们把8001停掉测试访问80的服务:
在这里插入图片描述
搭建成功,至于监控需要服务熔断开启才能监控

再补充两个点,监控和路由spring cloud的基本知识点都囊括了
路由其实就是起到一个调用和拦截的作用

新建一个模块注意层级

在这里插入图片描述
首先是pom文件

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix-dashboard</artifactId><version>1.4.7.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId><version>1.4.7.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId><version>1.4.7.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId><version>1.4.7.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.hyx.springcloud</groupId><artifactId>springcloud-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId><version>1.4.7.RELEASE</version></dependency></dependencies>

然后是application配置文件:

server:port:9001hystrix:dashboard:proxy-stream-allow-list:"localhost"

然后是Java启动类

@SpringBootApplication@EnableHystrixDashboardpublicclassDashboardHystrix_9001{publicstaticvoidmain(String[] args){SpringApplication.run(DashboardHystrix_9001.class, args);}}

8001修改:之前添加的不用重复添加
在这里插入图片描述
这两个服务全部启动起来访问:http://localhost:8001/actuator/hystrix.stream
至少也要启动下面的服务
在这里插入图片描述
如果一直ping的话然后查看8001也没有写错的话:只需要访问一下80的某个controller链接再访问就正常了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后访问监控页面9001
在这里插入图片描述
看到下面这个页面就成功了
在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_46142046/article/details/140499589
版权归原作者 拥你ω 所有, 如有侵权,请联系我们删除。

“spring cloud环境搭建,Eureka集群,Ribbon负载均衡”的评论:

还没有评论