设置 Engine 组策略
负载策略
通过 xorm.NewEngineGroup 创建 EngineGroup 时,第三个参数为 policies,我们可以通过该参数来指定 Slave 访问的负载策略。如创建EngineGroup 时未指定,则默认使用轮询的负载策略。
xorm 中内置五种负载策略,分别为随机访问负载策略,权重随机访问负载策略,轮询访问负载策略,权重轮询访问负载策略和最小连接数访问负载策略。开发者也可以通过实现 GroupPolicy 接口,来实现自定义负载策略。
- 随机访问负载策略
1. import (
2. _ "github.com/lib/pq"
3. "xorm.io/xorm"
4. )
6. var eg *xorm.EngineGroup
8. func main() {
9. conns := []string{
10. "postgres://postgres:[email protected]:5432/test?sslmode=disable;",
11. "postgres://postgres:[email protected]:5432/test1?sslmode=disable;",
12. "postgres://postgres:[email protected]:5432/test2?sslmode=disable",
13. }
15. var err error
16. eg, err = xorm.NewEngineGroup("postgres", conns, xorm.RandomPolicy())
17. }
- 权重随机访问负载策略
1. import (
2. _ "github.com/lib/pq"
3. "xorm.io/xorm"
4. )
6. var eg *xorm.EngineGroup
8. func main() {
9. conns := []string{
10. "postgres://postgres:[email protected]:5432/test?sslmode=disable;",
11. "postgres://postgres:[email protected]:5432/test1?sslmode=disable;",
12. "postgres://postgres:[email protected]:5432/test2?sslmode=disable",
13. }
15. var err error
16. //此时设置的test1数据库和test2数据库的随机访问权重为2和3
17. eg, err = xorm.NewEngineGroup("postgres", conns, xorm.WeightRandomPolicy([]int{2, 3}))
18. }
- 轮询访问负载策略
1. import (
2. _ "github.com/lib/pq"
3. "xorm.io/xorm"
4. )
6. var eg *xorm.EngineGroup
8. func main() {
9. conns := []string{
10. "postgres://postgres:[email protected]:5432/test?sslmode=disable;",
11. "postgres://postgres:[email protected]:5432/test1?sslmode=disable;",
12. "postgres://postgres:[email protected]:5432/test2?sslmode=disable",
13. }
15. var err error
16. eg, err = xorm.NewEngineGroup("postgres", conns, xorm.RoundRobinPolicy())
17. }
- 权重轮询访问负载策略
1. import (
2. _ "github.com/lib/pq"
3. "xorm.io/xorm"
4. )
6. var eg *xorm.EngineGroup
8. func main() {
9. conns := []string{
10. "postgres://postgres:[email protected]:5432/test?sslmode=disable;",
11. "postgres://postgres:[email protected]:5432/test1?sslmode=disable;",
12. "postgres://postgres:[email protected]:5432/test2?sslmode=disable",
13. }
15. var err error
16. //此时设置的test1数据库和test2数据库的轮询访问权重为2和3
17. eg, err = xorm.NewEngineGroup("postgres", conns, xorm.WeightRoundRobinPolicy([]int{2, 3}))
18. }
- 最小连接数访问负载策略
1. import (
2. _ "github.com/lib/pq"
3. "xorm.io/xorm"
4. )
6. var eg *xorm.EngineGroup
8. func main() {
9. conns := []string{
10. "postgres://postgres:[email protected]:5432/test?sslmode=disable;",
11. "postgres://postgres:[email protected]:5432/test1?sslmode=disable;",
12. "postgres://postgres:[email protected]:5432/test2?sslmode=disable",
13. }
15. var err error
16. eg, err = xorm.NewEngineGroup("postgres", conns, xorm.LeastConnPolicy())
17. }
- 自定义负载策略
你也可以通过实现 GroupPolicy 接口来实现自定义负载策略。
1. type GroupPolicy interface {
2. Slave(*EngineGroup) *Engine
3. }
