Online studies - Day 15 - Lecture - Media Asset Management System Integration five

3.4  server development 
3.4.1  Analysis of demand 
learning courses to incoming service ID , section Id ( Lesson Plan ID) access to learning address request search service. 
3.4.2  Search service registration Eureka 
Learning Services To call search service owned media queries course information, you need to register to search eureka in. 
1 , to see whether the service name xc-service-search

注意修改application.xml中的服务名称:
spring:
application:
name: xc‐service‐search

2 , configure the search service configuration file application.yml , joined Eureka configuration is as follows:

eureka:
client:
registerWithEureka: true #服务注册开关
fetchRegistry: true #服务发现开关
serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址,多个中间用逗号分隔
defaultZone:
${EUREKA_SERVER:http://localhost:50101/eureka/,http://localhost:50102/eureka/}
instance:
prefer‐ip‐address: true #将自己的ip地址注册到Eureka服务中
ip‐address: ${IP_ADDRESS:127.0.0.1}
instance‐id: ${spring.application.name}:${server.port} #指定实例id
ribbon:
MaxAutoRetries: 2 #最大重试次数,当Eureka中可以找到服务,但是服务连不上时将会重试,如果eureka中找不
到服务则直接走断路器
MaxAutoRetriesNextServer: 3 #切换实例的重试次数
OkToRetryOnAllOperations: false #对所有操作请求都进行重试,如果是get则可以,如果是post,put等操作
没有实现幂等的情况下是很危险的,所以设置为false
ConnectTimeout: 5000 #请求连接的超时时间
ReadTimeout: 6000 #请求处理的超时时间

3 , add eureka dependent on:

<!‐‐ 导入Eureka客户端的依赖 ‐‐>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring‐cloud‐starter‐netflix‐eureka‐client</artifactId>
</dependency>

4 , modify the boot class, the class is added as annotations on:

@EnableDiscoveryClient

3.4.3  Search Service clients 
create a search service in the learning service client interface, which will generate the proxy object, call search service:
 

package com.xuecheng.learning.client;
import com.xuecheng.api.search.EsCourseControllerApi;
import com.xuecheng.framework.client.XcServiceList;
import org.springframework.cloud.netflix.feign.FeignClient;
@FeignClient(value = "xc‐service‐search")
public interface CourseSearchClient {
@GetMapping(value="/getmedia/{teachplanId}")
public TeachplanMediaPub getmedia(@PathVariable("teachplanId") String teachplanId);
}

3.4.4 Service 
is defined in the learning service service method that remote requests curriculum management services, media asset management service to get courses address.
 

@Service
public class LearningService {
@Autowired
CourseSearchClient courseSearchClient;
//获取课程
public GetMediaResult getMedia(String courseId, String teachplanId) {
//校验学生的学习权限。。是否资费等
//调用搜索服务查询
TeachplanMediaPub teachplanMediaPub = courseSearchClient.getmedia(teachplanId);
if(teachplanMediaPub == null || StringUtils.isEmpty(teachplanMediaPub.getMediaUrl())){
//获取视频播放地址出错
ExceptionCast.cast(LearningCode.LEARNING_GETMEDIA_ERROR);
}
return new GetMediaResult(CommonCode.SUCCESS,teachplanMediaPub.getMediaUrl());
}
}

3.4.5 Controller 
call service based on lesson plans id query video playback Address:

@RestController
@RequestMapping("/learning/course")
public class CourseLearningController implements CourseLearningControllerApi {
@Autowired
LearningService learningService;
@Override
@GetMapping("/getmedia/{courseId}/{teachplanId}")
public GetMediaResult getmedia(@PathVariable String courseId, @PathVariable String
teachplanId) {
//获取课程学习地址
return learningService.getMedia(courseId, teachplanId);
}
}

3.4.6  Test 
using a swagger-ui or postman testing service learning courses video address query interface.

3.5  front-end development 
3.5.1 requirements analysis 
need to complete the following functions in the learning center front page: 
1 , pages need to bring into the course curriculum Id parameters and lesson plans Id parameter, where the course Id parameters will bring, lesson plans Id can air. 
2 , enter the page according to curriculum Id displayed on the right side of the course out lesson plans. 
3 , enter the page request parameters to determine if there are lesson plans Id video for this section is played. 
4 , enter the page to determine if the lesson plan id is 0 you need to remove the course of a lesson plan of Id , and plays the first video of a lesson plan. 
3.5.2 api method

let sysConfig = require('@/../config/sysConfig')
let apiUrl = sysConfig.xcApiUrlPre;
/*获取播放地址*/
export const get_media = (courseId,chapter) => {
return http.requestGet(apiUrl+'/api/learning/course/getmedia/'+courseId+'/'+chapter);
}

3.3.3  configure the agent 
in Nginx in ucenter.xuecheng.com virtual host configuration / api / learning / path forwarding this url please forward to learning services.

#学习服务
upstream learning_server_pool{
server 127.0.0.1:40600 weight=10;
}
#学习服务
location ^~ /api/learning/ {
proxy_pass http://learning_server_pool/learning/;
}

3.5.3  Video playback page 
1 , if the incoming lesson plans id is 0 First lesson plan is withdrawn id 
at created complete hook method

created(){
//当前请求的url
this.url = window.location
//课程id
this.courseId = this.$route.params.courseId
//课程计划id
this.chapter = this.$route.params.chapter
//查询课程信息
systemApi.course_view(this.courseId).then((view_course)=>{
if(!view_course || !view_course[this.courseId]){
this.$message.error("获取课程信息失败,请重新进入此页面!")
return ;
}
let courseInfo = view_course[this.courseId]
console.log(courseInfo)
this.coursename = courseInfo.name
if(courseInfo.teachplan){
//将从服务端获取的课程计划json转成对象
let teachplan = JSON.parse(courseInfo.teachplan);
//将课程计划赋值给数据模型
this.teachplanList = teachplan.children;
console.log(this.teachplanList)
if(!this.chapter || this.chapter == '0'){
//取出第一个教学计划
this.chapter = this.getFirstTeachplan()
console.log(this.chapter)
//开始学习
this.study(this.chapter)
}
}
})
},

Remove the first chapter ID :

//取出第一个章节
getFirstTeachplan(){
for(var i=0;i<this.teachplanList.length;i++){
let firstTeachplan = this.teachplanList[i];
if(firstTeachplan.children && firstTeachplan.children.length>0){
let secondTeachplan = firstTeachplan.children[0];
return secondTeachplan.id;
}
}
return ;
},

start to learn:

//开始学习
study(chapter){
// 获取播放地址
courseApi.get_media(this.courseId,chapter).then((res)=>{
if(res.success){
let fileUrl = sysConfig.videoUrl + res.fileUrl
//播放视频
this.playvideo(fileUrl)
}else if(res.message){
this.$message.error(res.message)
}else{
this.$message.error("播放视频失败,请刷新页面重试")
}
}).catch(res=>{
this.$message.error("播放视频失败,请刷新页面重试")
});
},

2 , click on the right course chapter switching play 
to add legacy code based on the click event, click on the call to start learning ( Study ).
 

<li v‐if="teachplan_first.children!=null" v‐for="(teachplan_second, index) in
teachplan_first.children"><i class="glyphicon glyphicon‐check"></i>
<a :href="url" @click="study(teachplan_second.id)">
{{teachplan_second.pname}}
</a>
</li>

3.5.4  Test 
access to online learning page: http://ucenter.xuecheng.com/#/learning/ course id / lesson plan id through the url passed two parameters: Course id and lesson plans id
if there is no lesson plan is passed
test items are as follows: 
1 , passing right course id , lesson plans id , autoplay video in this section 
2 , passing right course id , lesson plans id passed 0 , automatically play the first video 
3 , incoming wrong course id or lesson plan id , an error message.

4 , by the switching section and the right to play the video of chapters.

Published 835 original articles · won praise 152 · Views 140,000 +

Guess you like

Origin blog.csdn.net/qq_40208605/article/details/104207017