仿b站微服务项目前后端完全运行环境与接口的文档

仿b站前后端分离微服务项目

实现了以下功能:

视频的上传、查看与上传时获取封面

视频的点赞、评论、可同时新增和删除多个收藏记录的收藏、多功能的弹幕

用户的个人信息查看编辑、用户之间的关注

用户的个人主页权限修改、查看、由个人主页权限动态决定的用户个人主页内容的获取

手机号、邮箱、图形验证码的多种方式登录

支持临时会话的服务器为代理的一对一实时私聊

基于讯飞星火的文生文、文生图、(全网首发)智能PPT

关注up动态视频、评论、点赞、私聊消息的生成与推送

基于es实现的视频和用户的聚合搜索、推荐视频

网关的路由和统一鉴权与授权

基于双token的七天内无感刷新token

防csrf、xss、抓包、恶意上传脚本攻击

统一处理异常和泛型封装响应体、自定义修改响应序列化值

简易的仿redis缓存读取与数据过期剔除实现

xxl-job+ redis+ rocketmq+ es+ 布隆过滤器的自定义es与mysql数据同步

slueth+zipkin的多服务间请求链路追踪

集中多服务日志到一个文件目录下与按需添加特定内容入日志

多服务的详细接口文档

前后端完全运行步骤:

1.运行中间件环境本机部署:

参考之前文章https://www.nowcoder.com/discuss/640368532730990592?sourceSSR=users

2.前后端项目本机启动

参考之前文章https://www.nowcoder.com/discuss/640865638906384384?sourceSSR=users

3.拉取项目后必要创建工作

修改配置

将连接MySQL的密码用户名密码改成实际密码,Redis默认连接无用户名密码,若未对Redis做出修改则不需修改springboot配置,es同Redis,Rocketmq同理,minio默认用户名密码minioadmin,未做minio修改则无需修改配置

创建MySQL数据库

执行github上的sql脚本(注意最好在远程连接软件如navicat、dbeaver上执行,直接在idea中连接MySQL作者并未测试且有人直接idea连接MySQL执行该脚本未成功)

创建ElasticSearch索引

启动搜索服务后在Postman中发送请求创建视频和用户的es索引

post请求:http://localhost:8201/search/createIndex

参数如下

{
    "indexName": "video",
    "properties": {
        "video_id": "integer",
        "video_name": "text",
        "intro": "text",
        "cover":"text",
        "length":"text",
        "create_time":"date",
        "author_name":"text",
        "author_id":"integer",
        "url":"text",
        "play_count":"integer",
        "danmaku_count":"integer",
        "collect_count":"integer"
    }
}

和post请求http://localhost:8201/search/createIndex

{
    "indexName": "user",
    "properties": {
        "id": "integer",
        "nickname": "text",
        "intro": "text",
        "cover":"text",
        "fans_count":"integer",
        "video_count":"integer"

    }
}


或将搜索服务中创建索引的接口createIndex上的@ApiIgnore注解去掉后浏览器输入localhost:8201/doc.html进入接口文档创建

package ljl.bilibili.search.controller;
import com.fasterxml.jackson.core.JsonProcessingException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import ljl.bilibili.client.pojo.RecommendVideo;
import ljl.bilibili.search.service.SearchService;
import ljl.bilibili.search.vo.request.EsKeywordRequest;
import ljl.bilibili.search.vo.response.UserKeyWordSearchResponse;
import ljl.bilibili.search.handler.MysqlToEsHandler;
import ljl.bilibili.search.vo.response.TotalCountSearchResponse;
import ljl.bilibili.search.vo.response.VideoKeywordSearchResponse;
import ljl.bilibili.search.vo.request.EsIndexRequest;
import ljl.bilibili.util.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
@RestController
@RequestMapping("/search")
@Api(tags = "搜索")
@Slf4j
@CrossOrigin(value = "*")
public class SearchController {
    @Resource
    SearchService searchService;
    @Resource
    MysqlToEsHandler mysqlToEsHandler;
    @GetMapping("/test")
    public Boolean test() throws Exception {
        mysqlToEsHandler.mysqlToEsHandler();
        return true;
    }
   
    @GetMapping("/totalKeywordSearch/{keyword}")
    @ApiOperation("关键字搜索后得出匹配视频和用户的总页数和总文档数")
    public Result<TotalCountSearchResponse> totalKeywordSearch(@PathVariable String keyword) {
        log.info("1");
        return searchService.totalKeywordSearch(keyword);
    }
   
    @GetMapping("/videoKeywordSearch/{keyword}/{pageNumber}/{type}")
    @ApiOperation("关键字搜索后得出匹配度降序排列的视频列表,得到对应页码的视频数据")
    public Result<List<VideoKeywordSearchResponse>> videoPageKeywordSearch(@PathVariable String keyword, @PathVariable Integer pageNumber, @PathVariable Integer type) throws JsonProcessingException {
        log.info("1");
        return searchService.videoPageKeywordSearch(keyword, pageNumber, type);
    }
   
    @GetMapping("/userKeywordSearch/{keyword}/{pageNumber}/{type}/{userId}")
    @ApiOperation("关键字搜索后得出匹配度降序排列的用户,得到对应页码的视频数据,传不同type决定再查询结果")
    public Result<List<UserKeyWordSearchResponse>> userPageKeywordSearch(@PathVariable String keyword, @PathVariable Integer pageNumber, @PathVariable Integer type, @PathVariable Integer userId) throws JsonProcessingException {
        log.info("1");
        return searchService.userPageKeywordSearch(keyword, pageNumber, type,userId);
    }
   
    @GetMapping("/likelyKeyWordSearch/{keyword}")
    @ApiOperation("输入关键字时停顿且未点确认导致跳转搜索结果页时对应的匹配度前十的近似关键字")
    public Result<List<String>> LikelykeyWordSearch(@PathVariable String keyword) throws IOException {
        log.info("1");
        return searchService.likelyKeywordSearch(keyword);
    }
    @GetMapping("/likelyVideoRecommend/{videoId}")
    @ApiOperation("推荐视频")
    @ApiIgnore
    public List<RecommendVideo> likelyVideoRecommend(@PathVariable String videoId) throws IOException {
        log.info("1");
        return searchService.likelyVideoRecommend(videoId);
    }
   
    @PostMapping("/addKeywordSearchRecord")
    @ApiOperation("增加搜索的历史记录")
    public Result<Boolean> addKeywordSearchRecord(@RequestBody EsKeywordRequest esKeywordRequest) throws IOException {
        log.info("1");
        return searchService.addKeywordSearchRecord(esKeywordRequest);
    }
   
    @PostMapping("/createIndex")
    @ApiIgnore     去掉
    public void crateIndex(@RequestBody EsIndexRequest esIndexRequest) {
        log.info("1");
        searchService.createIndex(esIndexRequest);
    }
    @PostMapping("/deleteIndex/{indexName}")
    @ApiIgnore   
    public void deleteIndex(@PathVariable String indexName) throws IOException {
        log.info("1");
        searchService.deleteIndex(indexName);
    }

}

minio桶创建

快速方法:在minio控制台中创建,按上面教程启动minio并进入控制台后如图创建桶

然后点击video桶修改桶权限使minio运行直接访问路径

相同步骤创建并修改video-cover、user-cover桶

如上面教程提到启动环境、启动前端后启动六个后端服务

注册新账号并登录

接下来点击右上角头像处进入个人中心上传视频

上传视频后会自动截取封面,若不做修改则用该封面作为默认封面

添加视频标题和简介后上传视频

上传完成后会检测,若视频编码可以在浏览器中播放则不会转码,否则会在notice服务中进行转码再重新上传

评论

点赞

收藏

弹幕修改个人信息

修改个人主页对外开放权限

项目地址LABiliBili,github地址GitHub - aigcbilibili/aigcbilibili: 仿bilibili前后端实现,演示地址https://labilibili.com/video/演示.mp4,如果大家觉得有帮助的话可以去github点个小星星♪(・ω・)ノ

该专栏存放前后端分离仿b站微服务项目相关教程

全部评论
体育生哥有两下子
点赞 回复 分享
发布于 08-06 16:22 北京
有没有交流群
点赞 回复 分享
发布于 08-07 21:48 香港
佬 ,先给你送几朵花 ,再去hub点星星
点赞 回复 分享
发布于 08-09 21:58 湖南
那个点赞功能有sql报错
点赞 回复 分享
发布于 08-16 17:42 湖南
前端点击个人主页之后,这样 :
点赞 回复 分享
发布于 08-16 21:38 湖南
chat哪里报错
点赞 回复 分享
发布于 08-23 12:22 湖南
chat哪里配置好了zipkin,然后和那个ai发个消息 , chat就直接寄了 , 图片是报错 :
点赞 回复 分享
发布于 08-23 23:25 湖南
那个查询视频评论哪里 , 对评论的评论是查不到的 ,只能查到top_id=null的评论 , 你哪里处理子评论的时候,没有放进map中 , 哪里应该需要改一下 , 然后查评论点赞数量的sql是不是写错了 , 对于查询子评论放入map修改如下 :
点赞 回复 分享
发布于 08-24 16:03 湖南
就是video哪里edit的这一段代码是啥意思啊?佬
点赞 回复 分享
发布于 08-30 11:27 湖南
这个错误是因为数据库中的某个对象(例如视图或存储过程)定义了一个特定的用户作为“definer”,而该用户('root'@'%')在当前数据库中不存在。要解决这个问题,你可以尝试以下步骤: 检查用户权限:确认数据库中是否存在'root'@'%'用户,或考虑使用其他用户来定义该对象。 修改对象的定义者:如果可以,修改相关视图或存储过程,使用存在的用户作为definer。 重新创建对象:如果适用,删除并重新创建这些对象,确保使用正确的用户。 #### #### 佬,我连接本地数据库,root 123456,然后把触发器的xxx改成root,还是报这个错误
点赞 回复 分享
发布于 10-23 09:39 江西
佬,我这一直有这个问题,视频播放不能够,追进去发现是404,但是我的服务已经启动了,其他的诸如上传、评论都可以,但是视频无法播放,我在postman把路径中的usercenter去掉就能否得到一个200响应,搞不明白为啥,我想去修改前端,又没有找到video.js
点赞 回复 分享
发布于 10-24 16:06 江西

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
6 19 评论
分享
牛客网
牛客企业服务