SpringCloud开发课程查询功能

 更新时间:2020年12月28日 10:54:09   作者:瑞 新  
这篇文章主要介绍了SpringCloud开发课程查询功能,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

介绍

技术

在这里插入图片描述
在这里插入图片描述

之前有用eureka 现在用nacos
工作流和gateway

在这里插入图片描述

接口数据流向

在这里插入图片描述

数据表

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

新建项目

新建cloud-删除src-新建modle

Eurak(发现)

 Eureka的作用

114、物业 (注册中心、心跳机制60s失效踢除)

没有服务注册于发现可以,但是会引来无穷无尽的麻烦
静态ip变更,影响多服务模块

架构

在这里插入图片描述
在这里插入图片描述

Eurak Server代码

新建moudle,和业务完全独立
pom依赖,最外层pomcloud版本号
新建配置文件
注解启动

验证http://localhost:8000/

在这里插入图片描述

Eureka客户端代码

配置dom
配置properties
启动client

在这里插入图片描述

利用Feign实现服务间调用

介绍

历史
netflex -> open (捐给spring cloud)

非常方便
基于接口和注解,和本地方法一样爽的http请求

在这里插入图片描述

代码

价格中调用课程服务

引入依赖

<!--  openfeign -->  <dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-openfeign</artifactId>  </dependency>

配置文件

#openfeign消费的负载均衡后期再配

加注解

//启动类的客户端@EnableFeignClients

客户端(在调用类写接口,复制被调用服务的controller方法)

package com.bennyrhys.course.client;import com.bennyrhys.entity.Course;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;import java.util.List;/** * @Author bennyrhys * @Date 12/27/20 8:04 PM * 课程列表的Feign客户端 */@FeignClient("course-list")public interface CourseListClient { @GetMapping("/course") List<Course> getList();}

验证pom中(自动引入其他服务的依赖)

在这里插入图片描述

controller(在price服务中调用course服务的方法)

在这里插入图片描述

验证

在这里插入图片描述

利用Ribbon实现负载均衡

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

修改配置文件

price服务调用course服务的负载均衡设置

#openfeign消费的负载均衡course-list.ribbon.NFLoadBanlancerRuleClassName=com.netflix.loadbalancer.RoundRobinRule

利用Hystrix实现断路器

比如获取用户信息卡住,但数据库的连接池一直未被释放。系统崩溃
断路器保护,某一处出现问题,保证不影响全部不可用,避免故障蔓延

在这里插入图片描述
依赖pom

<!--  断路器 客户端-->  <dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>  </dependency>

配置

#断路器 客户端(默认关闭)feign.hystrix.enabled=true

启动类注解

@EnableCircuitBreaker

断路器实现类CourseListClientHystrix

package com.bennyrhys.course.client;import com.bennyrhys.entity.Course;import java.util.ArrayList;import java.util.List;import org.springframework.stereotype.Component;/** * 描述:  断路器实现类 */@Componentpublic class CourseListClientHystrix implements CourseListClient{ @Override public List<Course> getList() {  List<Course> defaultCourses = new ArrayList<>();  Course course = new Course();  course.setId(1);  course.setCourseId(1);  course.setCourseName("默认课程");  course.setValid(1);  defaultCourses.add(course);  return defaultCourses; }}

指明调用服务的断路器类

/** * @Author bennyrhys * @Date 12/27/20 8:04 PM * 课程列表的Feign客户端 */@FeignClient(value = "course-list", fallback = CourseListClientHystrix.class)@Primary //防止调用服务的controller爆红线不好看public interface CourseListClient { @GetMapping("/course") List<Course> getList();}

断路器效果

在这里插入图片描述

整合两个服务

将课程列表和课程价格进行整合

返回实体CourseAndPrice

 Integer id; Integer courseId; String name; Integer price;

service

 @Override public List<CourseAndPrice> getCoursesAndPrice() {  List<CourseAndPrice> courseAndPriceList = new ArrayList<>();  List<Course> courses = courseListClient.courseList();  for (int i = 0; i < courses.size(); i++) {   Course course = courses.get(i);   if (course != null) {    CoursePrice coursePrice = getCoursePrice(course.getCourseId());    CourseAndPrice courseAndPrice = new CourseAndPrice();    courseAndPrice.setPrice(coursePrice.getPrice());    courseAndPrice.setName(course.getCourseName());    courseAndPrice.setId(course.getId());    courseAndPrice.setCourseId(course.getCourseId());    courseAndPriceList.add(courseAndPrice);   }  }  return courseAndPriceList; }}

在这里插入图片描述

通过网关Zuul实现路由功能

两个特点

在这里插入图片描述

Zuul集成

在这里插入图片描述

新建mudle模块sourse-zuul

引入依赖

<dependencies> <dependency>  <groupId>org.springframework.cloud</groupId>  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency>  <groupId>org.springframework.cloud</groupId>  <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> </dependencies> <build> <plugins>  <plugin>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-maven-plugin</artifactId>  </plugin> </plugins> </build>

配置文件

spring.application.name=course-gatewayserver.port=9000logging.pattern.console=%clr(%d{${LOG_DATEFORMAT_PATTERN:HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}mybatis.configuration.map-underscore-to-camel-case=trueeureka.client.service-url.defaultZone=http://localhost:8000/eureka/#zuul.prefix=/bennyrhyszuul.routes.course-list.path=/list/**zuul.routes.course-list.service-id=course-listzuul.routes.course-price.path=/price/**zuul.routes.course-price.service-id=course-price

启动类 注解

package com.bennyrhys.course;import org.springframework.boot.SpringApplication;import org.springframework.cloud.client.SpringCloudApplication;import org.springframework.cloud.netflix.zuul.EnableZuulProxy;/** * 描述:  网关启动类 */@EnableZuulProxy@SpringCloudApplicationpublic class ZuulGatewayApplication { public static void main(String[] args) {  SpringApplication.run(ZuulGatewayApplication.class, args); }}

效果图

在这里插入图片描述

实现网关过滤器

在这里插入图片描述

过滤前

package com.bennyrhys.course.filter;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;import com.netflix.zuul.exception.ZuulException;import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;import org.springframework.stereotype.Component;/** * 描述:  记录请求时间 */@Componentpublic class PreRequestFilter extends ZuulFilter { @Override public String filterType() {  //过滤器的类型  return FilterConstants.PRE_TYPE; } @Override public int filterOrder() {  return 0; } @Override public boolean shouldFilter() {  //是否启用过滤器  return true; } @Override public Object run() throws ZuulException {  RequestContext currentContext = RequestContext.getCurrentContext();  currentContext.set("startTime", System.currentTimeMillis());  System.out.println("过滤器已经记录时间");  return null; }}

过滤后

package com.bennyrhys.course.filter;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;import com.netflix.zuul.exception.ZuulException;import org.springframework.cache.annotation.Cacheable;import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;import org.springframework.stereotype.Component;/** * 描述:  请求处理后的过滤器 */@Componentpublic class PostRequestFilter extends ZuulFilter { @Override public String filterType() {  return FilterConstants.POST_TYPE; } @Override public int filterOrder() {  return FilterConstants.SEND_RESPONSE_FILTER_ORDER - 1; } @Override public boolean shouldFilter() {  return true; } @Override public Object run() throws ZuulException {  RequestContext currentContext = RequestContext.getCurrentContext();  Long startTime = (Long) currentContext.get("startTime");  long duration = System.currentTimeMillis() - startTime;  String requestURI = currentContext.getRequest().getRequestURI();  System.out.println("uri:" + requestURI + ",处理时长:" + duration);  return null; }}

uri:/bennyrhys/list/course,处理时长:919

到此这篇关于SpringCloud开发课程查询功能的文章就介绍到这了,更多相关SpringCloud课程查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot中如何将logback切换为log4j2

    springboot中如何将logback切换为log4j2

    springboot默认使用logback作为日志记录框架,常见的日志记录框架有log4j、logback、log4j2,这篇文章我们来学习怎样将logbak替换为log4j2,需要的朋友可以参考下
    2023-06-06
  • 深入理解spring事务

    深入理解spring事务

    这篇文章主要介绍了spring事务深入理解,介绍了事物特性,事物隔离级别,事物的具体使用实例,有感兴趣的同学可以研究下
    2021-03-03
  • springboot整合vue2-uploader实现文件分片上传、秒传、断点续传功能

    springboot整合vue2-uploader实现文件分片上传、秒传、断点续传功能

    对于大文件的处理,无论是用户端还是服务端,如果一次性进行读取发送、接收都是不可取,很容易导致内存问题,下面这篇文章主要给大家介绍了关于springboot整合vue2-uploader实现文件分片上传、秒传、断点续传功能的相关资料,需要的朋友可以参考下
    2023-06-06
  • java中方法递归的简单示例

    java中方法递归的简单示例

    这篇文章主要给大家介绍了关于java中方法递归的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Java模拟登录正方教务抓取成绩、课表、空教室

    Java模拟登录正方教务抓取成绩、课表、空教室

    这篇文章主要介绍了Java模拟登录正方教务抓取成绩、课表、空教室等信息,Java实现模拟登录正方教务抓取成绩、课表、空教室,通过HttpClient来模拟浏览器请求,Jsoup解析网页内容,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • 基于jmeter实现跨线程组传递token过程图解

    基于jmeter实现跨线程组传递token过程图解

    这篇文章主要介绍了基于jmeter实现跨线程组传递token,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • java接入创蓝253短信验证码的实例讲解

    java接入创蓝253短信验证码的实例讲解

    下面小编就为大家分享一篇java接入创蓝253短信验证码的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Java使用新浪微博API开发微博应用的基本方法

    Java使用新浪微博API开发微博应用的基本方法

    这篇文章主要介绍了Java使用新浪微博API开发微博应用的基本方法,文中还给出了一个不使用任何SDK实现Oauth授权并实现简单的发布微博功能的实现方法,需要的朋友可以参考下
    2015-11-11
  • 浅谈Java安全编码之文件和共享目录的安全性

    浅谈Java安全编码之文件和共享目录的安全性

    Java程序是跨平台的,可以运行在windows也可以运行在linux。但是平台不同,平台中的文件权限也是不同的。windows大家经常使用,并且是可视化的权限管理,这里就不多讲了。本文主要讲讲linux下面的文件的权限和安全性问题,并且探讨一下如何在java程序中考虑文件的安全性
    2021-06-06
  • Java三种IO模型原理实例详解

    Java三种IO模型原理实例详解

    这篇文章主要介绍了Java三种IO模型原理实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论