赞
踩
搭建环境:jdk1.8,Hoxton.SR8,springboot2.2.2,mysql8
开发工具:idea,maven
我们首先了解什么是spring cloud:
首先创建一个普通的空项目:
在空项目里面添加模块,一会所有的项目都在这里搭建:
我们首先添加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 这样注册中心才能发现这个类
下面开始编写注册中心
首先创建目录结构
添加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模块进行通信,两种方式
<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
基本一致,我只说不一样的地方:
然后编写80的controller层
先创建一个controller
代码如下:正常的controller层代码
package com.hyx.springcloud.controller; import com.hyx.springcloud.entity.Dept; import com.hyx.springcloud.service.MyApiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; /** * @author hyx * @date 2024/7/17 * @since JDK 1.8 */ @RestController @RequestMapping("/dept") public class DeptController { @Autowired private MyApiService myApiService; @PostMapping("/findAll") public List<Dept> findAllDept(){ return myApiService.findAllDept(); } @GetMapping("/findById/{id}") public Dept findByIdDept(@PathVariable("id") Integer id){ return myApiService.findById(id); } @PostMapping("/add") public int addDept(@RequestBody Dept 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模块提供的
package com.hyx.springcloud.controller; import com.hyx.springcloud.entity.Dept; import com.hyx.springcloud.service.MyApiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; /** * @author hyx * @date 2024/7/17 * @since JDK 1.8 */ @RestController @RequestMapping("/dept") public class DeptController { @Autowired private MyApiService myApiService; @PostMapping("/findAll") public List<Dept> findAllDept(){ return myApiService.findAllDept(); } @GetMapping("/findById/{id}") public Dept findByIdDept(@PathVariable("id") Integer id){ return myApiService.findById(id); } @PostMapping("/add") public int addDept(@RequestBody Dept 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: 9001
hystrix:
dashboard:
proxy-stream-allow-list: "localhost"
然后是Java启动类
@SpringBootApplication
@EnableHystrixDashboard
public class DashboardHystrix_9001 {
public static void main(String[] args) {
SpringApplication.run(DashboardHystrix_9001.class, args);
}
}
8001修改:之前添加的不用重复添加
这两个服务全部启动起来访问:http://localhost:8001/actuator/hystrix.stream
至少也要启动下面的服务
如果一直ping的话然后查看8001也没有写错的话:只需要访问一下80的某个controller链接再访问就正常了
然后访问监控页面9001
看到下面这个页面就成功了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。