2.2 Feign 
2.2.1 Feign介绍 
Feign是Netflflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端。Spring Cloud引入Feign并且集成了Ribbon实现客户端负载均衡调用。
2.2.2 Feign测试 
1、在客户端添加依赖 
在课程管理服务添加下边的依赖:

<dependency>
<groupId>org
.springframework.cloud</groupId>
<artifactId>spring
‐
cloud
‐
starter
‐
openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign
‐
okhttp</artifactId>
</dependency>

2、定义FeignClient接口 
参考Swagger文档定义FeignClient,注意接口的Url、请求参数类型、返回值类型与Swagger接口一致。
在课程管理服务中创建client包,定义查询cms页面的客户端该用接口,

@FeignClient(value
= XcServiceList.XC_SERVICE_MANAGE_CMS)
public interface CmsPageClient {
@GetMapping(
"
/cms/page/get/{id}
"
)
public CmsPage findById(@PathVariable(
"
id
"
) String id);
}

3、启动类添加@EnableFeignClients注解 
4、测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class FeignTest {
@Autowired
CmsPageClient cmsPageClient;
@Test
public void testFeign() {
//通过服务id调用cms的查询页面接口
CmsPage cmsPage
=
cmsPageClient.findById(
"
5a754adf6abb500ad05688d9
"
);
System.out.
println(cmsPage);
}
}

Feign工作原理如下: 
1、 启动类添加@EnableFeignClients注解,Spring会扫描标记了@FeignClient注解的接口,并生成此接口的代理 
对象
2、 @FeignClient(value 

XcServiceList.XC_SERVICE_MANAGE_CMS)即指定了cms的服务名称,Feign会从注册中 
心获取cms服务列表,并通过负载均衡算法进行服务调用。 
3、在接口方法 中使用注解@GetMapping(
"
/cms/page/get/{id}
"
),指定调用的url,Feign将根据url进行远程调 
用。
2.2.4 Feign注意点 
SpringCloud对Feign进行了增强兼容了SpringMVC的注解 ,我们在使用SpringMVC的注解时需要注意: 
1、feignClient接口 有参数在参数必须加@PathVariable("XXX")和@RequestParam("XXX")
2、feignClient返回值为复杂对象时其类型必须有无参构造函数。

课程预览技术方案 
3.1 需求分析 
课程预览是为了保证课程发布后的正确性,通过课程预览可以直观的通过课程详情页面看到课程的信息是否正确, 
通过课程预览看到的页面内容和课程发布后的页面内容是一致的。
下图是课程详情页面的预览图:

 
3.2 课程详情页面技术方案

课程预览所浏览到的页面就是课程详情页面,需要先确定课程详情页面的技术方案后方可确定课程预览的技术方案。

3.2.1 技术需求 
课程详情页面是向用户展示课程信息的窗口,课程相当于网站的商品,本页面的访问量会非常大。此页面的内容设计不仅要展示出课程核心重要的内容而且用户访问页面的速度要有保证,有统计显示打开一个页面超过4秒用户就走掉了,所以本页面的性能要求是本页面的重要需求。
本页面另一个需求就是SEO,要非常有利于爬虫抓取页面上信息,并且生成页面快照,利于用户通过搜索引擎搜索课程信息。
3.2.2 解决方案 
如何在保证SEO的前提下提高页面的访问速度 : 
方案1: 
对于信息获取类的需求,要想提高页面速度就要使用缓存来减少或避免对数据库的访问,从而提高页面的访问速度。下图是使用缓存与不使用缓存的区别

 
此页面为动态页面,会根据课程的不同而不同,方案一采用传统的JavaEE Servlet/jsp的方式在Tomcat完成页面渲染,相比不加缓存速度会有提升。
优点:使用redis作为缓存,速度有提升。 
缺点:采用Servlet/jsp动态页面渲染技术,服务器使用Tomcat,面对高并发量的访问存在性能瓶颈。 
方案2: 
对于不会频繁改变的信息可以采用页面静态化的技术,提前让页面生成html静态页面存储在nginx服务器,用户直接访问nginx即可,对于一些动态信息可以访问服务端获取json数据在页面渲染。

 
优点:使用Nginx作为web服务器,并且直接访问html页面,性能出色。 
缺点:需要维护大量的静态页面,增加了维护的难度。 
选择方案2作为课程详情页面的技术解决方案,将课程详情页面生成Html静态化页面,并发布到Nginx上。

学成在线 第9天 讲义-课程预览 Eureka Feign 四相关推荐

  1. 学成在线 第9天 讲义-课程预览 Eureka Feign Ribbon

    1Eureka注册中心 1.1需求分析 在前后端分离架构中,服务层被拆分成了很多的微服务,微服务的信息如何管理?Spring Cloud中提供服务注册中心来管理微服务信息. 为什么 要用注册中心? 1 ...

  2. 学成在线 第9天 讲义-课程预览 Eureka Feign 五

    3.3 课程预览技术方案  根据要求:课程详情页面采用静态化技术生成Html页面,课程预览的效果要与最终静态化的Html页面内容一致. 所以,课程预览功能也采用静态化技术生成Html页面,课程预览使用 ...

  3. 学成在线 第9天 讲义-课程预览 Eureka Feign 六

    4.2 课程数据模型查询接口  静态化操作需要模型数据方可进行静态化,课程数据模型由课程管理服务提供,仅供课程静态化程序调用使用.  4.2.1 接口定义  1.响应结果类型 @Data @ToStr ...

  4. 学成在线 第7天 讲义-课程管理实战

    1我的课程 1.1需求分析 课程添加完成后可通过我的课程进入课程修改页面,此页面显示我的课程列表,如下图所示,可分页查询. 上边的查询要实现分页.会存在多表关联查询,所以建议使用mybatis实现我的 ...

  5. 存入json文件_学成在线第8-2天讲义-课程图片管理 分布式文件系统 上传图片开发...

    上传图片开发 1.1.1需求分析 在很多系统都有上传图片/上传文件的需求,比如:上传课程图片.上传课程资料.上传用户头像等,为了提供系 统的可重用性专门设立文件系统服务承担图片/文件的管理,文件系统服 ...

  6. 学成在线-第16天-讲义- Spring Security Oauth2 JWT RSA加解密

    学成在线-第16天-讲义- Spring Security Oauth2 JWT 1 用户认证需求分析 1.1 用户认证与授权 ​ 截至目前,项目已经完成了在线学习功能,用户通过在线学习页面点播视频进 ...

  7. 学成在线-第13天-讲义-在线学习 HLS

    1在线学习需求分析 1.1需求描述 学成在线作为在线教育网站,提供多种学习形式,包括:录播.直播.图文.社群等,学生登录进入学习中心即可 在线学习,本章节将开发录播课程的在线学习功能,需求如下: 1. ...

  8. 学成在线-第19天-讲义-分布式事务

    1订单与选课需求分析 1.1订单支付流程 学成在线的课程分为免费和收费两种.对于收费课程,用户需提交订单并完成支付方可在线学习. 提交订单及支付流程如下: 1.用户提交订单需要先登录系统 2.提交订单 ...

  9. 学成在线 第4天 讲义-页面静态化 页面预览

    1页面静态化需求 1.为什么要进行页面管理? 本项目cms系统的功能就是根据运营需要,对门户等子系统的部分页面进行管理,从而实现快速根据用户需求修改 页面内容并上线的需求. 2.如何修改页面的内容? ...

最新文章

  1. JAVA学习笔记--数组初始化
  2. 语义分割--Efficient Deep Models for Monocular Road Segmentation
  3. 实战SSM_O2O商铺_17【商铺编辑】Dao层开发
  4. Java判断字符串是否相同
  5. MapReduce过程详解及其性能优化
  6. 华为郭平:很愿意使用高通芯片制造手机
  7. Silverlight之OOB模式下的一些事
  8. MFC学习心得第一篇
  9. 基于ssm的简单员工信息管理系统
  10. 手机wap网页制作的认识(有关meta…
  11. latex参考文献bib基本格式_在Latex中利用.bib进行参考文献管理
  12. Python实现自动录制虎牙直播
  13. c++在csv写入汉字_python-opencv表格识别转csv
  14. 40 张最全计算机网络基础思维导图
  15. 【LDU】 Week2自测 Disney‘s FastPass | 状压dp、Floyd
  16. 水滴pin安卓版apk_小水滴app下载
  17. [Codeforces Round #516][Codeforces 1063C/1064E. Dwarves, Hats and Extrasensory Abilities]
  18. 确定与不确定,风险与保险
  19. Windows10,21H1 官方正式ESD版下载地址
  20. 你听过最美的网名是什么?

热门文章

  1. 三极管三种放大组态的比较?为什么共基频带宽呢?(硬件每日一题)
  2. 小米4c刷机包Linux,MIUI【双开应用】数据备份(android通用,分身数据)
  3. 基于matlab的电流滞环控制,电流滞环控制matlab
  4. 文华编程是c 语言吗,文华财经编程规则
  5. 江西省九江市谷歌高清卫星地图下载
  6. 使用Python写俄罗斯方块,以游戏的方式学习编程
  7. 用Python实现地理信息出图(含比例尺、指北针、图例)
  8. LeetCode 面试题 峰与谷
  9. SpringBoot整合AlertManager,实现自定义的告警收敛以及邮件处理,告警风暴,解决重复告警问题
  10. CAN FD、CANDTU、CAN记录仪实战之示波器捕捉波形及对照CAN FD帧定义解析CAN FD帧