点击空白处退出提示
作品详情
概要(阅读该项目前,请先查看 1616ai开放平台项目介绍)
ai 星球是一个集论坛、资讯功能于一体的网站,与1616ai 开放平台(1616ai.com)相互配合。用户可以在此发布文章,资讯,并与其他用户参与讨论
技术栈
springboot mybatis mysql redis mango elasticsearch logstash nginx rabbitmq shiro
nodejs vue
主要模块
- 文章模块
- 搜索模块
- 用户模块
- 站内消息模块
- 单点登录模块
- 推荐模块
主要技术点
1. 文章模块
用户可发布文章(支持富文本,后端依托第三方插件实现富文本安全过滤,保留合法代码),支持图片上传,外部链接等
文章编辑支持存储草稿,后端需要维护文章状态(如:草稿、待审核、审核不通过、公开发布(审核通过)、删除等状态)
文章支持不同的阅读权限(如:私密、关注、公开等),不同用户获取文章列表时,亦药对阅读权限进行验证
文章发布后支持修改编辑功能,使用 mango 存储修改后的文章副本,进入到待审核状态,需要保证审核通过之前,
原文章不受到影响,待审核通过后,将 mango 中的数据覆盖到数据库中的文章进行更新,并删除 mango 中的数据
文章发布需要审核,对接了第三方人工智能 API 接口进行审核
文章支持标签分类
文章支持点赞、收藏
文章可被其他用户发表评论并回复评论,评论回复实现了二级展示(数据库表记录回复目标,并在查询数据时使用特殊算法进行处理),
可以追踪回复目标用户,回复内容亦可点赞
实现了 redis(文章 ID 作为 key)缓存
2. 搜索模块
使用了 Elasticsearch 实现搜索能力,支持中文分词(ik)、拼音、自动补全提示功能
支持文章标题和正文搜索,并根据相关性进行排序
支持过滤功能(标签、权限等)
数据基于 mysql 进行存储及更新,通过 logstash 定时任务 sql 读取数据库数据,过滤后输出到 es 中,保证数据实时更新
支持查看搜索历史记录,支持搜索结果收藏
3. 推荐模块(结合站内权限)
管理员等拥有特殊权限的账号,可发布特殊类型的文章,并展示在站内特殊位置,如页面上方轮播图,文章置顶等
另外,使用 redis zset 实现了文章热度排行榜
4. 用户模块
实现了论坛用户主页功能,可展示文章
实现了关注其他用户的功能,用户可看到哪些用户关注了自己,也可以看到自己关注了哪些用户,并可以跳转到其他用户主页
可对自己的文章进行管理(如:编辑、发布、删除、改变阅读权限等)
支持用户基本信息修改(密码、昵称、头像等信息)
开发了成就系统(任务)功能,如:进行一次收藏等,即可触发成就系统更新。用户进行每一次操作,都有可能被成就系统记录,
具体实现使用 rabbitmq 异步发送操作数据,累积成就进度,完成成就后,用户还会收到站内消息提示
5. 站内消息模块
用户操作可能触发站内消息提示,如成就完成,评论被回复、点赞、收藏等,在消息触发点使用 rabbitmq 发送异步消息到用户消息仓库(mysql),
前端网站定期到服务端检查并拉取消息
消息进行了分类,如系统消息、成就消息、用户消息等
在消息界面,支持点击消息进行跳转、删除消息等操作
6. 单点登录模块
该网站除了论坛外,还做了 AI能力搜索门户(另一个项目 1616ai.com),其中就支持了单点登录,使用 shiro + jwt 进行实现
支持用户名密码及手机号登录、微信扫码登录,一步自动注册等功能
登录成功后,发放 jwt 令牌存储至浏览器中,访问接口时,使用 Authorization 携带令牌头,后端进行验证并获得用户信息
7. SEO 优化
为了被搜索引擎收录,对 SEO 进行优化,java 端依旧保持了 restapi 风格,加入了 nodejs 作为前端服务器中转,用户打开文章页面时,
会被 nginx 转发到 nodejs 服务器,nodejs 访问 javaapi 加载文档,最后返回到前端的就是一个完整内容的文档(去除了浏览器到 java 端的直接 xhr 请求)
页面静态化,请求地址重写为 {文章 ID}.html 的形式
8. 其他技术
使用了 nginx 做反向代理服务器,包括静态资源的下载,请求重写、转发等
前端使用了 vue + elementui 进行开发,支持移动端自适应(前端非本人开发)
数据库使用 mysql + snowflake 雪花算法实现分布式唯一主键,使用 mybatis-plus 快速查询
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论