摘要
本节要实现的有3点
- 解析toml文件
- 计算key的hash值
- 将请求路由到对应的shard
编程实现
1. 定义&解析toml规则文件
定义sharding.toml文件
[[shards]]
name = "Moscow"
id = 0
[[shards]]
name = "Minsk"
id = 1
[[shards]]
name = "Kiev"
id = 2
导入解析toml的包
添加configFile参数解析
在main中读取配置文件
import (
"github.com/BurntSushi/toml"
)
var (
configFile = flag.String("config-file", "sharding.toml", "The configuration file")
)
func main() {
flag.Parse()
var c config.Config
if _, err := toml.DecodeFile(*configFile, &c); err != nil {
log.Fatalf("failed to decode config file(%q):%v", *configFile, err)
}
}
2. 添加config模块
创建config/config.go
定义Config & Shard结构
package config
type Shard struct {
Name string
Id string
}
type Config struct {
Shards []Shard
}
3. 指定shard
先不自动shard,先手动指定shard
添加shard参数解析
检查shard是否存在
确认shard的id
// main.go
var (
shardName = flag.String("shardName", "Moscow", "The name of the shard")
)
ok, shard := c.ExistsShard(*shardName)
if !ok {
log.Fatalf("shard %v not exists", shardName)
}
// config.go
func (c *Config) ExistsShard(name string) (bool, Shard) {
var rc Shard
for _, shard :=