【十次方微服務後臺開發】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
向指定的消費者(手機)傳送驗證碼