一、系统设计与工程搭建

1、需求分析

程序员的专属社交平台,包括头条、问答、活动、交友、吐槽、招聘

SpringBoot+SpringCloud+SpringMVC+SpringData全家桶架构

swagger编写前后端开发接口文档

REST 是Representational State Transfer的缩写,翻译是”表现层状态转化”。

2、开发准备

生成getter and setter的快捷键是Alt+Insert

返回结果、分页类、结果代码类

数据库主键值使用分布式ID生成器,采用推特的snowflake (雪花)算法【速度快、自增、多个节点、不会碰撞】

3、基础微服务:标签CRUD

增删改查使用postman测试

编写公共异常处理类

前后端跨域问题处理:要在controller类上添加注解 @CrossOrigin 即可!这个注解其实是CORS的实现。

CORS(Cross-Origin Resource Sharing, 跨源资源共享)是W3C出的一个标准,其思 想是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成 功,还是应该失败。

二、查询与缓存

1、基础微服务---条件查询

使用Predicate toPredicate查询,使用PageRequest分页

2、招聘微服务

使用代码生成器codeutil生成代码

3、问答微服务开发

4、文章微服务开发

5、缓存处理:docker中安装redis

RedisTemplate封装Jedis,对查询文章进行缓存,如果为空则查询,最后return

修改前/删除后清空缓存,并可以在查询时设置过期的时间

Spring Cache缓存方法的返回值map形式

@CacheEvict注解表示清空注解,@Cacheable表示添加注解

三、MongoDB

1、概念

表=集合,行=文档

2、CRUD

db.spit.remove({})

db.spit.findOne({userid:'1013'}).limit(3)

db.spit.find({content:/^加班/})模糊查询加班开头

包含db.spit.find({userid:{$nin:["1013","1014"]}})

条件连接db.spit.find({$or:[ {userid:"1013"} ,{visits:{$lt:2000} }]})

列值增长db.spit.update({_id:"2"},{$inc:{visits:NumberInt(1)}} )

3、Java操作

mongodb-driver驱动包

BasicDBObject bson=new BasicDBObject("visits",new BasicDBObject("$gt",1000) );// 构建查询条件

SpringDataMongoDB实现吐槽功能

4、吐槽微服务

查询吐槽列表、吐槽点赞

使用Redis控制不能重复点赞,先判断再点赞并存入

四、分布式搜索引擎ElasticSearch

1、介绍

基于Lucene的搜索服务器和RESTful web接口

索引=数据库、类型=表、文档=行

2、Head插件的使用

使用npm install ‐g grunt‐cli插件,自动运行任务

需要配置允许跨域访问

可以实现新建索引、CRUD

3、IK分词器,两种分词算法:ik_smart 和 ik_max_word

默认中文单字符分词

配置文件中可以进行自定义扩展词典和停止词典

4、搜索微服务开发

实现新增和查询功能

5、使用Logstash与MySQL数据同步

logstash ‐f ../mysqletc/mysql.conf 自动执行查询并将新数据打印到控制台

6、Docker环境安装ES

拷贝配置文件到宿主机,并在启动时将宿主机的yml配置文件挂载到容器

并将ik分词器上传到宿主机

添加允许跨域配置后下载head镜像并创建容器

五、消息中间件RabbitMQ

1、简介

AMQP的实现

特点:进入队列之前,通过 Exchange 来路由消息的,内置的 Exchange或自己实现

由Exchange将消息路由到一个 或多个Queue中(或者丢弃)。Exchange并不存储消息

发送给Exchange的时候,一般会指定一个routing key, 来指定这个消息的路由规则

2、使用

直接模式(Direct):“RouteKey”为要发送到的队列名字,不存在RouteKey中指定的队列名,则该消息会被抛弃【只能将消息发送到唯一一个节点】

分列模式(Fanout):一次发给多个队列时,一个Exchange可以绑定多个 Queue,多队列绑定到交换机

主题模式(Topic):通过模糊匹配使得来自不同的源头的消息可以到达一个队列usa.news(usa.*)

3、用户注册

生成手机验证码,存入Redis并发送到RabbitMQ,设置过期时间

4、短信微服务:提取MQ中的消息

使用阿里云通信发送消息

阿里云,产品中选择”短信服务“ (4)申请签名 (5)申请模板 (6)创建 accessKey

向指定的消费者(手机)发送验证码

最新文章

  1. Python自动获取数据库表结构
  2. Apache连接PHP后无法启动问题解决思路
  3. ExtJS学习之路第四步:看源码,实战MessageBox
  4. .net 动态编译解决考勤计算问题
  5. 玩转变量、环境变量以及数学运算(shell)
  6. 【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集
  7. JavaEE自定义标签:标签类的创建、tld配置文件的创建(位置、如何创建)、Web-XML配置、JSP应用
  8. php对象与数组互转
  9. .Net基础体系和跨框架开发普及
  10. centos7防火墙导致不能访问的
  11. Angular创建路由从主界面跳转到我们的cesium界面
  12. Python练习八
  13. python之random函数
  14. PHP文件包含漏洞攻防实战
  15. how to get keyboard key with non blocking in terminal
  16. PS入门到精通完全自学教程
  17. Linux下如何确认磁盘是否为SSD
  18. 【BZOJ】【1419】Red is good
  19. sprint2 团队贡献分
  20. Python操作Excel删除一个Sheet

热门文章

  1. UEC++ 多线程(一) FRunnable
  2. ES小知识点
  3. python及第三方库交叉编译
  4. Go设计模式学习准备——下载bilibili合集视频
  5. 前端程序员学习 Golang gin 框架实战笔记之一开始玩 gin
  6. 小程序uni-app发起网络异步请求
  7. 为Azure-云准备一个基于Red Hat 8.x 的虚拟机镜像
  8. CEOI2020 道路(Roads) Solution
  9. .NET周报【10月第1期 2022-10-11】
  10. ciscn 2022 misc 部分wp