寻 友 软 件
创始人
2024-01-26 12:19:04
0

寻友软件项目

    • 技术
      • 技术
      • 功能
      • 部署Redis
      • 部署RocketMQ
      • JWT(Json Web Token)
      • 虹软人脸识别
      • 部署MongoDB(尽量不用docker部署mongo)
      • 部署Nginx
      • 过滤器及拦截器加缓存
    • 编码流程
    • 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

部署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

部署Rocket
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)

io.jsonwebtokenjjwt0.9.1

String secret = "dong";Map 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 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. 导入
com.arcsoft.facearcsoft-sdk-face2.2.0.1

  1. 首次需联网激活,激活后可离线使用
  2. 查看sdk中的test案例

部署MongoDB(尽量不用docker部署mongo)

安装
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

过滤器及拦截器加缓存

编码流程

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


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 form-data{动态的一些参数,以表格形式}
resp:json{} json{失败原因}


bug

如果导入不了interface 清缓存File->Invalidate Caches,百度yyds

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...