1234567891011121314151617181920212223242526272829303132333435363738 |
- package broker
- import (
- "github.com/buraksezer/consistent"
- "github.com/cespare/xxhash"
- )
- type Member string
- func (m Member) String() string {
- return string(m)
- }
- type hasher struct{}
- func (h hasher) Sum64(data []byte) uint64 {
- return xxhash.Sum64(data)
- }
- func PickMember(members []string, key []byte) string {
- cfg := consistent.Config{
- PartitionCount: 9791,
- ReplicationFactor: 2,
- Load: 1.25,
- Hasher: hasher{},
- }
- cmembers := []consistent.Member{}
- for _, m := range members {
- cmembers = append(cmembers, Member(m))
- }
- c := consistent.New(cmembers, cfg)
- m := c.LocateKey(key)
- return m.String()
- }
|