黑马程序员技术交流社区

标题: 【郑州校区】学成在线 第9天 讲义-课程预览 Eureka Feign 四 [打印本页]

作者: 我是楠楠    时间: 2019-12-18 15:50
标题: 【郑州校区】学成在线 第9天 讲义-课程预览 Eureka Feign 四
【郑州校区】学成在线 第9天 讲义-课程预览 Eureka Feign 四

2.2 Feign
2.2.1 Feign介绍
FeignNetflflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端。Spring Cloud引入Feign并且集成了Ribbon实现客户端负载均衡调用。
2.2.2 Feign测试
1、在客户端添加依赖
在课程管理服务添加下边的依赖:
[AppleScript] 纯文本查看 复制代码
 <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页面的客户端该用接口,

[AppleScript] 纯文本查看 复制代码
@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、测试

[AppleScript] 纯文本查看 复制代码
@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}
"
),指定调用的urlFeign将根据url进行远程调
用。
2.2.4 Feign注意点
SpringCloudFeign进行了增强兼容了SpringMVC的注解 ,我们在使用SpringMVC的注解时需要注意:
1feignClient接口 有参数在参数必须加@PathVariable("XXX")@RequestParam("XXX")
2feignClient返回值为复杂对象时其类型必须有无参构造函数。

3 课程预览技术方案
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上。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2