1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| package main
import ( "fmt" "log" "net/http" "time"
"encoding/json" "github.com/gin-gonic/gin" "github.com/samuel/go-zookeeper/zk" )
const ( zkServers = "localhost:2181" )
func main() { r := gin.Default()
r.GET("/hello", func(c *gin.Context) { c.String(http.StatusOK, "Hello from Go service!") })
registerToZookeeper()
r.Run(":8080") }
func registerToZookeeper() { conn, _, err := zk.Connect([]string{zkServers}, time.Second*5) if err != nil { panic(err) }
ensurePathExists(conn, "/services") ensurePathExists(conn, "/services/provider-service")
data, _ := json.Marshal(map[string]interface{}{ "name": "provider-service", "address": "127.0.0.1", "port": 8080, "sslPort": nil, "payload": map[string]interface{}{"@class": "org.springframework.cloud.zookeeper.discovery.ZookeeperInstance", "id": "provider-service", "name": "provider-service", "metadata": map[string]string{"instance_status": "UP"}}, "serviceType": "DYNAMIC", "uriSpec": map[string]interface{}{ "parts": []map[string]interface{}{ {"value": "scheme", "variable": true}, {"value": "://", "variable": false}, {"value": "address", "variable": true}, {"value": ":", "variable": false}, {"value": "port", "variable": true}, }, }, })
path := "/services/provider-service/" + generateServiceId() _, err = conn.Create(path, data, zk.FlagEphemeral, zk.WorldACL(zk.PermAll)) if err != nil { log.Fatalf("register service error: %s", err) } else { log.Println(path) } }
func ensurePathExists(conn *zk.Conn, path string) { exists, _, err := conn.Exists(path) if err != nil { log.Fatalf("check path error: %s", err) } if !exists { _, err := conn.Create(path, []byte{}, 0, zk.WorldACL(zk.PermAll)) if err != nil { log.Fatalf("create path error: %s", err) } } }
func generateServiceId() string { return fmt.Sprintf("%d", time.Now().UnixNano()) }
|