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

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

实现了以下功能:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

多服务的详细接口文档



前后端完全运行步骤:

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

参考之前星球文章

2.前后端项目本机启动

参考之前星球文章

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服务中进行转码再重新上传

不同于传统项目,本项目需要的核心数据是文件流,不能直接在数据库中插入一系列数据,因此需要从上传开始将核心视频数据以及上传过程中会插入的其他数据导入数据库。其余功能本机演示明天补全

项目地址https://labilibili.com,github地址https://github.com/aigcbilibili/aigcbilibili

演示地址https://labilibili.com/video/演示.mp4,如果大家觉得有帮助的话可以去github点个小星星♪(・ω・)ノ

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
骆驼菜菜
作者分享
宣传下自己的仿B站前后端分离微服务开源项目
6
好久没冒泡过了,宣传下开源项目 仿B站前后端分离微服务项目 实现了以下功能: 视频的上传、查看、点赞、评论、收藏、弹幕(有分片上传与断点续传实现) 用户的个人信息查看编辑、关注 用户个人主页权限查看修改、个人主页内容获取 图形码、手机号、邮箱登录注册 一对一实时私聊 大模型文生文、文生图、智能PPT 关注UP动态、评论点赞私聊消息的生成与推送 视频和用户的聚合搜索、关键字补全、关键字高亮 项目亮点: 技术栈相当丰富且贴近企业需求:使用了当下企业开发最常用的可以快速开发单体应用的SpringBoot,保证了下限的基础上引用了SpringCloud系列组件搭建微服务提高上限,并使用了流行中间件Redis、RocketMQ、ElasticSearch,完整覆盖所有公司对Java应届生的要求,技术栈达到要求则过筛选率大大提高,且按需引入技术如实时连接Websocket、转码Jave等,体现出相对于大部分Java人更强的解决需求能力,进一步提供过筛选率,同时更广的技术栈代表可供面试官提问的点更多,也是可以自己提前准备主动引导面试官的点更多 技术亮点多:一份好的简历需要有足够多能和面试官细聊的地方,本项目亮点相当多,像分片上传、断点续传、数据同步流程、一对一实时私聊、集成大模型功能及全网首发的给出主题生成ppt所有文案实现等都足够和面试官展示军火相当久且可以延伸出足够多八股,将一场面试节奏完全掌握在自己手中 有详细完整最快落地的教程:从部署环境到前后端运行到接口调通有相当完整详细的教程,完全无需会一点前端知识,不用配置特定环境或特定包目录运行前端和解决任何前端相关bug即可启动前端,且运行所需包都可直接从作者文件床中获取无需在官网中找省去麻烦从而最快本机跑通项目功能,并附带项目技术栈使用讲解更快理解项目 有配套简历话术:配合现成简历话术极快改进简历,省去大量的反复修改简历时间 有java基础的情况下按照教程操作最快不到一天就能把仿b站项目本机运行起来 项目地址:https://labilibili.com,github地址https://github.com/aigcbilibili/aigcbilibili,已有240star,欢迎访问项目,给GitHub点个小星星就更好啦
12
原创仿b站前后端分离微服务开源项目
7
仿b站项目最终版 实现了以下功能: 视频的上传、查看、点赞、评论、收藏、弹幕(有分片上传与断点续传实现) 用户的个人信息查看编辑、关注 用户个人主页权限查看修改、个人主页内容获取 图形码、手机号、邮箱登录注册 一对一实时私聊 文生文、文生图、智能PPT 关注UP动态、评论点赞私聊消息的生成与推送 视频和用户的聚合搜索、关键字补全、关键字高亮1 项目亮点 重复度极低,项目需求都是作者一比一复刻分析b站功能决定的,在企业招聘需求减少招聘要求提高的当下意味着在简历筛选会得到远高于常人的被感兴趣程度(绝大部分Java人都是做的黑马尚硅谷项目或其余较流行项目,项目上的千篇一律导致hr及面试官对简历感兴趣程度较低,相对不愿意细看简历,且由于这些项目网上资料过多过详细容易被面试官判定为难度较小的项目而不能确定Java人是否高水平,以及对使用这些项目的人简历要求提高甚至见到简历写这些项目就直接丢弃) 技术栈相当丰富且贴近企业需求:使用了当下企业开发最常用的可以快速开发单体应用的SpringBoot,保证了下限的基础上引用了SpringCloud系列组件搭建微服务提高上限,并使用了流行中间件Redis、RocketMQ、ElasticSearch,完整覆盖所有公司对Java应届生的要求,技术栈达到要求则过筛选率大大提高,且按需引入技术如实时连接Websocket、转码Jave等,体现出相对于大部分Java人更强的解决需求能力,进一步提供过筛选率,同时更广的技术栈代表可供面试官提问的点更多,也是可以自己提前准备主动引导面试官的点更多 技术亮点多:一份好的简历需要有足够多能和面试官细聊的地方,本项目亮点相当多,像分片上传、断点续传、数据同步流程、一对一实时私聊、集成大模型功能及全网首发的给出主题生成ppt所有文案实现等都足够和面试官展示军火相当久且可以延伸出足够多八股,将一场面试节奏完全掌握在自己手中 有详细完整最快落地的教程:从部署环境到前后端运行到接口调通有相当完整详细的教程,且运行所需包都可直接从作者文件床中获取无需在官网中找省去麻烦从而最快本机跑通项目功能,并附带项目技术栈使用讲解更快理解项目 有配套简历话术:配合现成简历话术极快改进简历,省去大量的反复修改简历时间 技术栈 springboot:快速开发Java应用程序 security:具备强大的鉴权授权 nacos:服务注册与发现 openfeign:远程调用服务 gateway:请求入口与路由网关 redis:跨服务缓存 elasticsearch:更快的查询与更高的查询匹配度 rocketmq:异步处理队列 minio:文件对象存储 mybatis-plus:便捷执行单表增删改查 mybatis-plus-join:业务层多表查询 druid:阿里数据库连接池 jwt:token实现形式 swagger:接口文档 gson:谷歌序列化转换 hutool:集成众多工具类省去手动实现工具类 websocket:实时长连接 讯飞星火api:集成大模型功能 jave:视频操作,转码、压缩、截图、去水印等 xxl-job:分布式可视化定时任务 zipkin:请求链路追踪信息可视化ui slueth:发送请求链路追踪信息 相关教程 本机运行环境部署https://articles.zsxq.com/id_hvd3tkx3pq6v.html 前后端运行https://articles.zsxq.com/id_o9k66ma79cu0.html 前后端接口调通https://articles.zsxq.com/id_zx28jqj1euco.html 需求分析与需求实现思路https://articles.zsxq.com/id_rft27b8wfv2i.html 简历写法https://articles.zsxq.com/id_0nnixwez6516.html redis、mybatis-plus、es、rocketmq使用https://articles.zsxq.com/id_8mx58r4c7dr2.html websocket、spring security、swagger knife4j、openfeign的使用https://articles.zsxq.com/id_8coisfuz2ts5.html minio、xxl-job、jave、mybatis-plus-join的使用https://articles.zsxq.com/id_1c7w2j0a5gld.html zipkin sleuth、completableFuture、手机号邮箱号登录https://articles.zsxq.com/id_0pvpjum0ms82.html 项目地址 线上地址:https://labilibili.com,演示地址:https://labilibili.com/video/演示.mp4,github地址https://github.com/aigcbilibili/aigcbilibili ,欢迎访问项目,给GitHub点个小星星就更好啦
8
仿b站前后端分离微服务项目简历写法
6
下载 APP