1. 程式人生 > 其它 >【十次方微服務後臺開發】Day01:環境、快取(吐槽)、ES搜尋文章、MQ註冊時傳送驗證碼

【十次方微服務後臺開發】Day01:環境、快取(吐槽)、ES搜尋文章、MQ註冊時傳送驗證碼

一、系統設計與工程搭建

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

向指定的消費者(手機)傳送驗證碼