gorm的读写分离还是挺有意思的,看官方文档代码
是有8个库,db1-db8,通过以下的代码,就设置了一个很复杂的读写分离,如下图
import ( "gorm.io/gorm" "gorm.io/plugin/dbresolver" "gorm.io/driver/mysql" ) db, err := gorm.Open(mysql.Open("db1_dsn"), &gorm.Config{}) db.Use(dbresolver.Register(dbresolver.Config{ // `db2` 作为 sources,`db3`、`db4` 作为 replicas Sources: []gorm.Dialector{mysql.Open("db2_dsn")}, Replicas: []gorm.Dialector{mysql.Open("db3_dsn"), mysql.Open("db4_dsn")}, // sources/replicas 负载均衡策略 Policy: dbresolver.RandomPolicy{}, }).Register(dbresolver.Config{ // `db1` 作为 sources(DB 的默认连接),对于 `User`、`Address` 使用 `db5` 作为 replicas Replicas: []gorm.Dialector{mysql.Open("db5_dsn")}, }, &User{}, &Address{}).Register(dbresolver.Config{ // `db6`、`db7` 作为 sources,对于 `orders`、`Product` 使用 `db8` 作为 replicas Sources: []gorm.Dialector{mysql.Open("db6_dsn"), mysql.Open("db7_dsn")}, Replicas: []gorm.Dialector{mysql.Open("db8_dsn")}, }, "orders", &Product{}, "secondary"))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)