一、系统设计与工程搭建

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

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

【十次方微服务后台开发】Day01:环境、缓存(吐槽)、ES搜索文章、MQ注册时发送验证码的更多相关文章

  1. 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现

    庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介      在第七篇文章<庐山真面目之七微服务架构Consul ...

  2. Apollo-open-capacity-platform 微服务能力开发平台 (转)

    来自大佬的apollo整合微服务的教程:欢迎大家点评和star,链接如下:https://gitee.com/owenwangwen/open-capacity-platform 官方demo链接:h ...

  3. 微服务项目开发学成在线_day02 CMS前端开发

    1 Vue.js与Webpack研究 开发版的浏览器:https://www.google.cn/intl/zh-CN/chrome/dev/ 前端的开发框架:微服务项目开发学成在线_Vue.js与W ...

  4. spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法

    spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...

  5. 携程框架Apollo实现.NET Core微服务统一配置(测试环境-单机)

    Apollo实现.NET Core微服务统一配置(测试环境-单机) https://www.cnblogs.com/guolianyu/p/10065999.html 一.前言 注:此篇只是为测试环境 ...

  6. 流量染色与gRPC服务托管 微服务协作开发、灰度发布之流量染色 灰度发布与流量染色

    大规模微服务场景下灰度发布与流量染色实践 https://mp.weixin.qq.com/s/UBoRKt3l91ffPagtjExmYw [go-micro]微服务协作开发.灰度发布之流量染色 - ...

  7. Dapr微服务应用开发系列0:概述

    题记:Dapr是什么,Dapr包含什么,为什么要用Dapr. Dapr是什么 Dapr(Distributed Application Runtime),是微软Azure内部创新孵化团队的一个开源项目 ...

  8. Dapr微服务应用开发系列2:Hello World与SDK初接触

    题记:上篇介绍了Dapr的环境配置,这次我们来动手尝试一下Dapr应用的开发 Hello World Dapr应用的Hello World其实和其他的Hello World一样简单: 首先用你喜欢的语 ...

  9. 微服务-使用Redis实现分布式缓存

    在单体中对于key信息和用户信息是放在内存中放的,通过session进行管理. 微服务是要放在分布式缓存中,以实现服务的无状态化. @Autowired private StringRedisTemp ...

  10. Blazor+Dapr+K8s微服务之开发环境调试

    1         安装Dapr开发调试环境 1.1         Dapr 完整安装模式不支持开发调试 在上一篇随笔<Blazor+Dapr+K8s微服务之服务调用>中,我们通过为每个 ...

随机推荐

  1. k8s中节点级别的日志

    容器化应用程序写入到 stdout 和 stderr 中的任何信息,都将被容器引擎重定向到某个地方.例如,Docker 容器引擎将 stdout 和 stderr 这两个输出流重定向到 logging ...

  2. 1.nexus的安装

    1,Nexus 介绍 Nexus是什么 Nexus 是一个强大的maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问. 不仅如此,他还可以用来创建yum.pypi.npm.docke ...

  3. salesforce零基础学习(一百一十九)In-App Guidance实现引导页操作功能

    本篇参考: https://help.salesforce.com/s/articleView?id=sf.customhelp_lexguid.htm&type=5 https://deve ...

  4. 鼠标悬停过度事件:Transition

    CSS代码:<style> div{width:100px;height:100px;background:blue;transition: 0.5s;//0.5秒完成}div:hover ...

  5. [CG从零开始] 6. 加载一个柴犬模型学习UV贴图

    在第 5 篇文章中,我们成功加载了 fbx 模型,并且做了 MVP 变换,将立方体按照透视投影渲染了出来.但是当时只是随机给顶点颜色,并且默认 fbx 文件里只有一个 mesh,这次我们来加载一个柴犬 ...

  6. 【Java】 DirectByteBuffer堆外内存回收

    PhantomReference虚引用 在分析堆外内存回收之前,先了解下PhantomReference虚引用. PhantomReference需要与ReferenceQueue引用队列结合使用,在 ...

  7. 可观测性的常见用例|Techtarget

    [ 文章来源 ]https://www.techtarget.com/searchitoperations/tip/Common-use-cases-for-observability 这些可观测性用 ...

  8. 7.MongoDB系列之聚合框架

    1. 管道阶段和可调参数 聚合框架基于管道的概念.他由多个阶段组成,每个阶段都会提供一组按钮或可调参数.每个阶段对其输入执行不同的数据处理任务,并生成文档已作为输出传递到下一阶段. 2. 阶段常见操作 ...

  9. Linux系统安装宝塔面板教程

    # Linux系统宝塔安装教程 注意:安装宝塔面板的前提条件 首先要有一台服务器或者使用linux系统的虚拟机. 安装前请确保是[全新的机器].必须是没装过其它环境的新系统,如Apache/Nginx ...

  10. .net core -利用 BsonDocumentProjectionDefinition 和Lookup 进行 join 关联 MongoDB 查询

    前序 前段时间由于项目需要用到MongoDB,但是MongoDB不建议Collection join  查询,网上很多例子查询都是基于linq 进行关联查询.但是在stackoverflow找到一个例 ...