寻 友 软 件

news2024/11/19 3:35:12

寻友软件项目

    • 技术
      • 技术
      • 功能
      • 部署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)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分销微信小程序介绍_分销小程序有什么作用呢

不同的微商城系统对于分销功能的支持会有不要的叫法&#xff0c;一般来说主要有两种&#xff0c;一种是基于商品分享的分销方式&#xff0c;通过分享链接识别客户从属关系&#xff0c;订单完成&#xff0c;结算佣金&#xff1b;另一种分销商可以建立并独立运营一个分销店铺&…

【JavaSE】关于多态那些事儿

目录 1. 多态 1.1 多态的概念 1.2 多态实现条件 1.3 向上转型 1.3.1 直接赋值 1.3.2 方法传参 1.3.3 方法返回 1.3.4 向上转型的优缺点 1.4 重写 1.4.1 重写的条件 1.4.2 重写注意事项 1.4.3 重载与重写的区别 1.5 通过父类的引用&#xff0c;调用这个父类和子类重…

CSS篇十六——盒子模型之边框

目录一、CSS盒子模型1.1 盒子模型组成1.2 边框&#xff08;border&#xff09;1.2.1 语法格式1.2.2 边框样式 border-style1.2.3 代码示例1.3 表格的细线边框1.3.1 语法格式、代码示例及结果一、CSS盒子模型 网页布局过程&#xff1a; 1.先准备好相关的网页元素&#xff0c;网…

My sql的深度剖析

一.数据库的创建、删除、使用 数据库的创建&#xff1a;create database 数据库名 数据库的删除&#xff1a;drop database 数据库名&#xff1b; 数据库的使用&#xff1a;use数据名&#xff1b; 所有数据库的查看&#xff1a;show databases; 建立数据时如何指定字符集…

在Java中计算Levenshtein莱文斯坦(相似度)编辑距离

在本教程中&#xff0c;我们将研究 Levenshtein 距离算法&#xff0c;该算法也称为编辑距离算法&#xff0c;用于比较单词的相似性。 什么是列文施泰因距离 Levenshtein距离算法由俄罗斯科学家Vladimir Levenshtein创建。 Levenshtein 距离算法通过计算将一个字符串转换为另…

基于单片机的贪吃蛇设计

1 绪论 1.1 设计目的 在21世纪的今天&#xff0c;人们的生活开始变得更加丰富多彩。在繁忙的工作之余&#xff0c;娱乐成为人们生活不可或缺的一份子&#xff0c;而游戏作为近年来逐渐兴起的一种娱乐方式&#xff0c;已经越来越受到人们的青睐。在工作学习之余&#…

dreamweaver网页设计作业制作 学生NBA篮球网页 WEB静态网页作业模板 大学生校园篮球网页代码 dw个人网页作业成品

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

第五章:双指针与离散化的映射

第五章&#xff1a;双指针、离散化、二进制运算与区间合并一、双指针1、什么是双指针&#xff1f;2、双指针的模板3、双指针例题&#xff08;1&#xff09;思路&#xff1a;&#xff08;2&#xff09;解答&#xff1a;C版&#xff1a;C版&#xff1a;二、离散化1、什么是离散化…

java面试强基(3)

重载和重写的区别? 重载 发生在同一个类中&#xff0c;方法名必须相同&#xff0c;参数类型不同、个数不同、顺序不同&#xff0c;方法返回值和访问修饰符可以不同。 重载就是同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理。 重写 重写发生在运行期&#xff0c;…

go语言基本环境搭建

下载地址 Go官网下载地址&#xff1a;https://studygolang.com/dl 一、下载对应电脑得安装包 二、下载完成点击安装下一步&#xff08;选择目录尽量简单&#xff09; 三、是否安装成功 四、环境变量 GOROOT和GOPATH都是环境变量&#xff0c;其中GOROOT是我们安装go开发包的路…

【计算机毕业设计】Springboot医疗管理系统源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 医疗服务系统&#xff0c;主要的模块包括查看管理员&#xff1b;首页、个人中心…

tomcat官网下载配置全部详细步骤(包含各种报错解决办法)

前言&#xff1a; 名字由来&#xff1a;翻译是野猫&#xff0c;tomcat的作者初衷是希望这个软件可以自力更生&#xff0c;自给自足。不依赖其他插件&#xff0c;独立达到提供web服务的效果 1.tocat和java的关系&#xff1f; tomcat是用Java语言编写的&#xff0c;需要运行在…

大三,请问现在自学Java还来得及吗?

前言 如果还在为入门Java晚而发愁时间够不够&#xff0c;首先你是准备自学&#xff0c;那么我们可以看看现在网络上一些比较热门的Java全体系的学习需要化多长时间&#xff0c;先拿B站上做的比较好的黑马教程和尚硅谷举例&#xff1a; 2022黑马程序员Java学习路线图​www.bili…

耗时半月,终于把牛客网软件测试面试八股文,整理成了文档资料.....

一、面试基础题 简述测试流程: 1、阅读相关技术文档&#xff08;如产品PRD、UI设计、产品流程图等&#xff09;。 2、参加需求评审会议。 3、根据最终确定的需求文档编写测试计划。 4、编写测试用例&#xff08;等价类划分法、边界值分析法等&#xff09;。 5、用例评审(…

飞象星球落地重庆云阳86所学校,县乡4万学生迎来素质课堂

猜生字笔画顺序、学习硬笔书法&#xff1b;跟随老师认识情绪、写下心里话……自从重庆云阳县86所中小学引入飞象星球双师素质课堂&#xff0c;4万多名县城和乡村孩子的课后素质课堂一下子变得丰富多彩起来。 图&#xff1a;洞鹿小学双河村校上双师素质书法课 云阳县地处三峡库…

代码随想录算法训练营第三十六天| LeetCode435. 无重叠区间、LeetCode763. 划分字母区间、LeetCode56. 合并区间

一、LeetCode435. 无重叠区间 1&#xff1a;题目描述&#xff08;435. 无重叠区间&#xff09; 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 2&#xff1a;解题思路 class …

MySQL面试问题汇总(2022)

一、MySQL架构 锁 什么是锁&#xff1f; 当多个连接并发地存取MySQL数据时&#xff0c;在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据&#xff0c;破坏数据库的一致性。 加锁是实现数据库并发控制的一个非常重要的…

BFV同态加密方案初步学习

BFV是把Bra12的LWE版本推到了RLWE版本&#xff0c;Bra12也可以叫做BFV。 经典的RLWE的公钥加密算法回顾 对比以前的Regev的LWE公钥加密方案&#xff0c;其实几乎只是把明文空间换了&#xff0c;也就是在最大比特编码的时候把2换成t&#xff0c;即&#xff0c;Δ⌊q/t⌋\Delta…

web网页设计期末课程大作业——香格里拉旅游网页设计 5页 HTML+CSS+JavaScript

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

一起来看看AMD最新显卡驱动22.11.1!

AMD最新推出了显卡驱动22.11.1&#xff0c;可以支持新上线的使命召唤&#xff1a;战区2&#xff0c;并且还修复了一系列的问题&#xff0c;AMD忠实用户们期待了嘛~ 更新内容 支持 使命召唤&#xff1a;战区 2.0 漫威蜘蛛侠&#xff1a;迈尔斯莫拉莱斯™ 固定问题 Radeon™ RX 6…