func New(servicename, serviceport string) (*Ring, error) { // XXX 在Mac上调试时,Mac没有eth0接口,会导致ring.New()失败。 // 建议增加一个参数,允许用户传入指定的Interface(因此用户程序可以将该配置写入配置文件)。 // 目前考虑到API兼容性,在上述方法获得一致同意前,不改动API,而是从环境变量读取。 iface, ok := os.LookupEnv("RING_SERVER_INTERFACE") if !ok { iface = "eth0" } localIp, err := externalIP(iface) if err != nil { return nil, err } mc, err := cache.NewCache("memory", `{"interval":60}`) if err != nil { return nil, err } serverId := localIp + ":" + serviceport + ":" + strconv.Itoa(os.Getpid()) + ":" + strconv.FormatInt(startTime, 10) r := Ring{ selfServerId: serverId, servicename: servicename, hashring: hashring.New([]string{serverId}), stop: make(chan struct{}), cache: mc, } r.register() r.subscribe() return &r, nil }
func NewUniq(input chan *Packet) (<-chan *Packet, error) { mc, err := cache.NewCache("memory", `{"interval":60}`) if err != nil { return nil, err } s := stream{ id: uuid.NewV4().String(), in: input, out: make(chan *Packet), cache: mc, lostMap: make(map[string]*waitingBuffer), } s.run() return s.out, nil }