项目作者: sosozhuang

项目描述 :
unique id generator, based on snowflake
高级语言: Go
项目地址: git://github.com/sosozhuang/go-snowflake.git
创建时间: 2017-03-08T11:40:28Z
项目社区:https://github.com/sosozhuang/go-snowflake

开源协议:Apache License 2.0

下载


guid

guid: based on snowflake, guid is written in golang. Call local function guid.NewIdWorker, will get an id worker. In addition, making generate id as a network service, a client can connect with grpc. Servers information are stored in etcd

Usage of guid:

  • Run as network service
    1. -datacenter-id uint
    2. data center id
    3. -etcd string
    4. etcd endpoints (default "http://127.0.0.1:2379")
    5. -host string
    6. server host (default "localhost")
    7. -path string
    8. worker id path (default "/snowflake-servers")
    9. -port int
    10. server port (default 7609)
    11. -seq uint
    12. sequence
    13. -skip-check
    14. skip sanity checks
    15. -worker-id uint
    16. worker id
  • Connect to remote service
    1. //connect to grpc server
    2. conn, err := grpc.Dial(fmt.Sprintf("%s:%d", "localhost", 7609), grpc.WithInsecure())
    3. if err != nil {
    4. log.Printf("Did not connect: %v", err)
    5. return
    6. }
    7. defer conn.Close()
    8. c := guid.NewWorkerClient(conn)
    9. //how many ids you want
    10. number := uint32(10)
    11. reply, err := c.GetId(context.Background(), &guid.Request{number})
    12. if err != nil {
    13. log.Fatalf("Could not get worker: %v", err)
    14. return
    15. }
    16. log.Printf("Fetch Ids %v\n", reply.Id)
  • Local call
    1. var workerId, datacenterId, sequence uint64 = 0, 1, 2
    2. idWorker, err := guid.NewIdWorker(workerId, datacenterId, sequence)
    3. if err != nil {
    4. log.Println("Failed to make id worker:", err)
    5. return
    6. }
    7. id, err := idWorker.NextId()
    8. if err != nil {
    9. log.Println("Failed to get next id:", err)
    10. return
    11. }
    12. fmt.Printf("Fetch Id %d\n", id)