寻友软件项目

  • 技术
    • 技术
    • 功能
    • 部署Redis与RocketMQ
    • JWT(Json Web Token)
    • 短信发送验证码
    • 虹软人脸识别
    • 部署MongoDB(不用docker部署)
    • 过滤器及拦截器加缓存
    • Nginx、Dubbo、Zookeeper、FastDFS
    • 小视频
    • 即时通讯
  • 编码流程
  • DOC接口文档
  • Bug

技术

技术

前端:

  • flutter+android+环信SDK+redux+shared_preferences+connectivity

后端:

  • SpringBoot + SpringMVC + MybatisPlus

  • 采用Apache Dubbo作为微服务架构技术

  • Redis集群实现缓存的高可用

  • MongoDB实现海量数据的存储

  • 采用RocketMQ作为消息服务中间件

  • ElasticSearch geo实现地理位置查询,实现附近的人的功能

  • CDN加速静态文件的加载

  • 使用分布式文件系统存储小视频数据

  • Spark+MLib实现智能推荐

  • Token校验用户登录(token:user)

  • 第三方:环信即时通讯

  • 第三方:阿里云OSS存储用户头像及封面图片

  • 第三方:使用虹软开放平台进行人脸识别

  • 第三方:使用云之讯发送手机验证码

技术架构

功能

注册、登录(手机号验证码)
交友(测灵魂、桃花传音、搜附近)
圈子(朋友圈,发动态,我的动态、关注数、粉丝数、点赞、评论)
消息(通知消息(点赞评论)、即时通信消息)
视频分享(发小视频、评论)

部署Redis与RocketMQ

部署redis集群
docker create --name redis-node01 --net host -v redis-node01:/data redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-01.conf --port 6379 1
docker create --name redis-node02 --net host -v redis-node01:/data redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-02.conf --port 6380 2
docker create --name redis-node03 --net host -v redis-node01:/data redis:5.0.2 --cluster-enabled yes --cluster-config-file nodes-node-03.conf --port 6381 3

docker start redis-node01 redis-node02 redis-node03 启动容器
docker exec -it redis-node01 /bin/bash 进入容器操作
redis-cli --cluster create xxxx:6379 xxxx:6380 xxxx:6381 --cluster-replicas 0 组件集群

redis-cli后 cluster nodes 查看集群信息
redis-cli -c 重定向后才可get \ set

部署RocketMQ
docker pull foxiswho/rocketmq:server-4.3.2
docker pull foxiswho/rocketmq:broker-4.3.2

创建nameserver容器

docker create -p 9876:9876 --name rmqserver \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-e "JAVA_OPTS=-Duser.home=/opt" \
-v /data/rmqserver-logs:/opt/logs \
-v /data/rmqserver-store:/opt/store \
foxiswho/rocketmq:server-4.3.2

创建broker.conf文件

vim /data/rmqbroker/conf/broker.conf
brokerIP1=xxx.xxx.xxx
namesrvAddr=xxx.xxx.xxx:9876
brokerName=broker_friends

创建broker容器

docker create -p 10911:10911 -p 10909:10909 --name rmqbroker \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-e "JAVA_OPTS=-Duser.home=/opt" \
-v /data/rmqbroker/conf:/etc/rocketmq \
-v /data/rmqbroker-logs:/opt/logs \
-v /data/rmqbroker-store:/opt/store \
foxiswho/rocketmq:broker-4.3.2

docker start rmqserver rmqbroker 启动容器

docker pull styletang/rocketmq-console-ng:1.0.0 RocketMQ的管理工具
docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=xx.xxx.xxx:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8082:8080 -t styletang/rocketmq-console-ng:1.0.0 安装并启动

JWT(Json Web Token)

JWT是一个字符串,经过加密处理与校验处理的字符串,形式:A.B.C
A由JWT头部信息header加密得到(Header)
B由JWT用到的身份验证信息json数据加密得到(Payload)
C由A和B加密得到,是校验部分(Signature)

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version>
</dependency>
String secret = "dong";Map<String, Object> claims = new HashMap<>();
claims.put("mobile", "123456789");
claims.put("id","2");
//加密(生成Token) HS256:加密方法 secret:盐噪声
String jwt = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS256, secret).compact();
//解密 需要盐噪声
Map<String,Object> body = Jwts.parser().setSigningKey(secret).parseClaimsJws(jwt).getBody();

短信发送验证码

虹软人脸识别

  1. 官网下载SDK
  2. libs目录下mvn install:install-file -D groupId=com.arcsoft.face -D artifactId=arcsoft-sdk-face -D version=2.2.0.1 -D packaging=jar -D file=arcsoft-sdk-face-2.2.0.1.jar 将jar包安装至maven仓库
  3. 导入
<dependency><groupId>com.arcsoft.face</groupId><artifactId>arcsoft-sdk-face</artifactId><version>2.2.0.1</version>
</dependency>
  1. 首次需联网激活,激活后可离线使用
  2. 查看sdk中的test案例

部署MongoDB(不用docker部署)

安装
docker pull mongo:4.0.3
docker create --name mongodb --restart=always -p 27017:27017 -v mongodb:/data/db mongo:4.0.3
docker start mongodb
docker exec -it mongodb /bin/bash
mongo

命令
创建索引 db.recommend_user.createIndex({'toUserId':1,'score':-1}) 1:正序 -1:倒序

MongoDB启动Bug
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})

过滤器及拦截器加缓存

Nginx、Dubbo、Zookeeper、FastDFS

小视频

  • 存储:存储量大—分布式FastDFS
  • 推荐:多种权重计算方式
  • 速度:CDN

即时通讯

自主实现:
Netty + WebSocket + RocketMQ + MongDB + Redis + Zookeeper + MySQL

第三方服务:环信

编码流程

注册登录
实体类、mapper、响应类
发送手机验证码
验证手机验证码:注册/登录
腾讯云对象存储
虹软人脸识别
完善个人信息及头像设置
首页:今日佳人、推荐列表
Rest调用SSO
实体类映射MongoDB -> 接口 -> Dubbo服务提供者实现接口 -> Dubbo远程调用服务
动态(朋友圈):发布动态、查询好友动态、查询推荐动态
实体类映射MongoDB -> 接口 -> Dubbo服务提供者实现接口 -> Dubbo远程调用服务
使用ThreadLocal 来 set 和 get 用户信息(Authorization获取)
自定义注解(实现不需要权限认证)
动态(朋友圈):评论动态、点赞动态、喜欢动态、评论
接口 -> Dubbo服务提供者实现接口 -> Dubbo远程调用服务 -> 实现相关业务(MongoDB+Redis)
小视频
server调用Dubbo服务使用mongo操作数据


DOC接口文档

SSO:18080
Server:18081
登录/注册
req:post /user/login json{手机号}
resp:json{} json{失败原因}
验证验证码
req: post /user/loginVerification json{手机号,验证码}
resp:json{isNew, token} json{失败原因}
根据token查用户
req:get /user/{token}
resp:json{用户信息}
完善用户信息
req:post /user/loginReginfo json{用户信息参数}{token}
resp:json{} json{失败原因}
上传头像
req:post /user/loginReginfo/head json{图片}{token}
resp:json{} json{失败原因}
今日佳人
req:get /seekfriends/today/best {token}
resp:json{id,头像,昵称,性别,年龄,标签,缘分值}
推荐列表
req:post /seekfriends/recommendation json{分页参数,条件参数(可null)} {token}
resp:json{查询结果(用TodayBest列表)}
朋友圈:发布
req:post /movements/save form-data{动态的一些参数,以表格形式}
resp:json{} json{失败原因}
朋友圈:查看
req: get /movements/query {page, pageSize}
resp:json{查询结果} json{失败原因}
朋友圈:查看推荐
req:get /movements/recommend {page, pageSize}
resp:json{查询结果} json{失败原因}
朋友圈:点赞/取消点赞(喜欢/取消喜欢:like->love)
req:GET /movements/{id}/like
resp:int{点赞数}
req:GET /movements/{id}/dislike
resp:int{点赞数}
朋友圈:查看单条动态信息
req:GET /movements/{id}
resp:json{查询结果}
朋友圈:查询评论信息
req:GET /movements/query {movementId, page, pageSize}
resp:json{查询结果}
朋友圈:发布评论
req:POST /movements/save json{}
resp:json{查询结果}
小视频
req:POST /smallVideo/save json{视频封面,小视频}
resp:json{查询结果}


Bug

如果导入不了interface 清缓存File->Invalidate Caches,百度yyds
dubbo消费超时:在application中dubbo.consumer.timeout=6000

寻 友 软 件(持续更新)相关推荐

  1. React-Native开发中常用的第三方控件持续更新

    2023.03.22更新 React Native ECharts 项目是一个开源的库,用于在 React Native 应用程序中创建交互式图表.通过用户友好的设计和简单的 API,开发者可以创建各 ...

  2. 【帆软报表】使用技巧及常见问题汇总-持续更新

    [帆软报表]使用技巧及常见问题汇总-持续更新 1.重复与冻结设置,做用:冻结区域 模板-重复与冻结设置 2.单元格有效小数设置 选中单元格-格式-数字-#0.00 3.图表中有效小数设置 图表属性表- ...

  3. 我喜欢的句子(持续更新)

    #自己挺喜欢的句子(持续更新) 2017 04 19 整理 真爱,不是费尽心思讨好,而是一见面就会笑. 忙的人,没心思议论别人,过得好的人,没心情在意别人的评价. 爱对一个人,人生就等于做对了大部分的 ...

  4. 明翰经验系列之恋爱篇V5.6(持续更新)

    明翰经验系列之恋爱篇V5.6(持续更新) 文章目录 传送门 前言 `0.认清自己` 1. 提升自己 1.1 `建立吸引` 1.1.1 `保持干净,整洁,卫生` 1.1.1.1 头发 1.1.1.2 ` ...

  5. 安卓知识体系搭建(持续更新)

    Java基础 日期操作类 [Android]DecimalFormat简单使用 Java语言编程规范--注释规范 Java内存分配之堆.栈和常量池 Java泛型详解 深入浅出Java中的增强 for ...

  6. 飞舟语录[持续更新]

    飞舟语录 n EASY MORNING是一档严肃的咨讯节目 1. 只要脸皮有够厚,何苦喝酒买罪受,只要心中有日月,天天都会有明日. 2. 吃完饭,到湖边溜遛弯,用自己的剩饭喂喂水怪~~ 3. 嘉宾难得 ...

  7. 持续更新 | PMCAFF问答专场活动分享笔记大合集

    哈喽大家好,PMACFF问答专场是社区邀请BAT.各大知名互联网公司的产品从业者和咖友们一同交流的一个活动形式,在举办过近60余期的活动之后受到了很多咖友的喜爱. 本文是我们对交流内容的一个沉淀,我们 ...

  8. Vue -- 指令【学习笔记】(持续更新)

    Vue – 指令[学习笔记](持续更新) 记录了Vue第三天的学习笔记 v-show 注意,v-show 不支持 <template> 元素,也不支持 v-else. 带有 v-show ...

  9. Android面试总结(持续更新修改)

    ###Android面试总结(持续更新修改) 1.Android 的四大组件是哪些,它们的作用? ①Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为 ...

最新文章

  1. 机器学习工程师 - Udacity 可视化 CNN
  2. python文本编码转换_Python: 转换文本编码
  3. mysql data ibdata1_database - 如何在MySQL中收缩/清除ibdata1文件
  4. 损失函数(损失函数、代价函数、目标函数)、​​​​​​​MSE、0-1损失函数、绝对误差损失函数、分位数损失函数、Huber损失函数、感知损失函数、Hinge损失函数、指数损失函数、对数损失函数
  5. 【设计模式系列】行为型模式之Mediator模式
  6. [js] setTimeout的第三个参数有什么用?
  7. 有oracle操作系统,Oracle操作系统认证方式
  8. Linux上的Django项目,下载文件报错,编码格式错误解决
  9. 买了一块烂砖头(《ADO.NET技术内幕》)- 以及今天看砖头的一些感想(技术感想)...
  10. IT运维管理必备工具大全,看完还敢称自己是高手吗?
  11. 20个命令行工具监控 Linux 系统性能
  12. iOS中使用图片作为颜色的背景图
  13. springMVC系列之(四) spring+springMVC+hibernate 三大框架整合(转)
  14. 小米路由器r3gv2/r4a Lean的OpenWrt固件
  15. docker快速安装nginx以及实现反向代理(上)
  16. file_get_contents() 报错failed to open stream: HTTP request failed! HTTP/1.1 505 HTTP Version Not Supp
  17. 智能手环APP软件开发
  18. Android自定义View-简约风歌词控件
  19. 1977-2021 高考四十四年,哪一张照片是属于你的记忆(珍贵!)
  20. 第七届蓝桥杯本科B组省赛 最大比例

热门文章

  1. A星自动寻路算法学习
  2. Windows下Python3.6 64位+TensorFlow1.6.0的安装
  3. 算法导论/第一部分_基础知识
  4. c语言学生成绩管理系统(增、删、查、改、排序、分析优秀及格率等)
  5. linux服务器中解压war包
  6. OpenCV手部图像预处理
  7. u8系统怎么连接服务器,怎么U8客户端连接服务器
  8. qualified name与unqualified name
  9. 使用Kettle工具进行数据抽取
  10. 谷歌本月重启办公室上班;小米成中国第一大手机厂商;英特尔处理器被曝存关键漏洞 | EA周报