SpringBoot項目開發(二十二):SpringBoot MongoDB實現副本集(讀寫分離)

1.MongoDB可以單庫、主從(官方現已不推薦)、副本集、分片加副本集,通過分片加副本集可以組成龐大的數據存儲集羣,而大部分項目使用副本集就能滿足需求了
2.MongoDB副本集(Replica Set):有自動故障恢復功能的主從集羣,有一個Primary節點和一個或多個Secondary節點組成。
3.副本集環境搭建,請參考 Mongodb安裝與設置副本集
4.SpringBoot實現 MongoDB的連接與讀寫分離操作,這個操作我卡了很久,其實也很簡單,就是連接字符串導致的,mongodb在SpringBoot項目的 application.properties文件中連接配置
# MongoDB URI配置 重要,添加了用戶名和密碼驗證
spring.data.mongodb.uri=mongodb://zhuyu:[email protected]:27017,192.168.68.137:27017,192.168.68.139:27017/ai?slaveOk=true&replicaSet=zypcy&write=1&readPreference=secondaryPreferred&connectTimeoutMS=300000

#每個主機的連接數
spring.data.mongodb.connections-per-host=50
#線程隊列數,它以上面connectionsPerHost值相乘的結果就是線程隊列最大值
spring.data.mongodb.threads-allowed-to-block-for-connection-multiplier=50
spring.data.mongodb.connect-timeout=5000
spring.data.mongodb.socket-timeout=3000
spring.data.mongodb.max-wait-time=1500
#控制是否在一個連接時,系統會自動重試
spring.data.mongodb.auto-connect-retry=true
spring.data.mongodb.socket-keep-alive=true

請仔細看好 spring.data.mongodb.uri 的配置,他的格式如下,可以參考mongodb連接

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

網上使用uri連接的很多都是錯誤的,導致我項目代碼一直連接不上

我本地MongoDB環境,192.168.68.137是主庫,138、139是從庫,主庫寫,從庫查

5.代碼示例,創建一個 Rest風格的 IndexController ,提供:添加與查詢接口,訪問這2個接口,看控制檯輸出,是否查操作自動分配到從庫,寫操作分配到主庫
@RequestMapping("/index")
@RestController
public class IndexController {

    @Autowired private MongoTemplate mongoTemplate;

    @RequestMapping("/getList")
    public List<TestModel> getList(){
        List<TestModel> list = mongoTemplate.findAll(TestModel.class,"test");
        return list;
    }

    @RequestMapping("/add")
    public String add(){
        TestModel model = new TestModel("zhuyu" + System.currentTimeMillis());
        mongoTemplate.insert(model , "test");
        return "success";
    }
}
5.1啓動項目,測試流程如下:(已先添加了1000條數據)
  • 1先訪問 getList
  • 2再訪問 add
  • 3然後使用測試工具 jmeter 做併發測試
  • 4最後查看 IEDA的控制檯,看請求是否自動把寫操作分配到主庫,讀操作分配到從庫

a 訪問 getList
在這裏插入圖片描述
b 訪問 add
在這裏插入圖片描述
c 工具 jmeter 做併發測試,每1秒100個線程併發 getList讀請求,且循環5次,總共500個請求,下面是測試結果
在這裏插入圖片描述

d IDEA的控制檯,第一 getList讀請求分配到從庫138上,第二個 add寫請求分配到主庫137上,其他的是jmeter測試工具併發 getList讀請求的結果,都是在 138、139從庫上
在這裏插入圖片描述

大功告成,源碼下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章