func run(ctx *cli.Context) { // Init API var opts []server.Option if ctx.GlobalBool("enable_tls") { cert := ctx.GlobalString("tls_cert_file") key := ctx.GlobalString("tls_key_file") if len(cert) > 0 && len(key) > 0 { certs, err := tls.LoadX509KeyPair(cert, key) if err != nil { fmt.Println(err.Error()) return } config := &tls.Config{ Certificates: []tls.Certificate{certs}, } opts = append(opts, server.EnableTLS(true)) opts = append(opts, server.TLSConfig(config)) } else { fmt.Println("Enable TLS specified without certificate and key files") return } } // create the router r := mux.NewRouter() s := &srv{r} var h http.Handler = s if ctx.GlobalBool("enable_stats") { st := stats.New() r.HandleFunc("/stats", st.StatsHandler) h = st.ServeHTTP(s) st.Start() defer st.Stop() } log.Printf("Registering RPC Handler at %s", RPCPath) r.HandleFunc(RPCPath, handler.RPC) switch ctx.GlobalString("api_handler") { case "proxy": log.Printf("Registering API Proxy Handler at %s", ProxyPath) r.PathPrefix(ProxyPath).Handler(handler.Proxy(Namespace, false)) default: log.Printf("Registering API Handler at %s", APIPath) r.PathPrefix(APIPath).HandlerFunc(apiHandler) } // create the server api := server.NewServer(Address) api.Init(opts...) api.Handle("/", h) // Initialise Server service := micro.NewService( micro.Name("go.micro.api"), micro.RegisterTTL( time.Duration(ctx.GlobalInt("register_ttl"))*time.Second, ), micro.RegisterInterval( time.Duration(ctx.GlobalInt("register_interval"))*time.Second, ), ) // Start API if err := api.Start(); err != nil { log.Fatal(err) } // Run server if err := service.Run(); err != nil { log.Fatal(err) } // Stop API if err := api.Stop(); err != nil { log.Fatal(err) } }
func run(ctx *cli.Context) { if len(ctx.String("address")) > 0 { Address = ctx.String("address") } if len(ctx.String("handler")) > 0 { Handler = ctx.String("handler") } if len(ctx.String("namespace")) > 0 { Namespace = ctx.String("namespace") } if len(ctx.String("cors")) > 0 { origins := make(map[string]bool) for _, origin := range strings.Split(ctx.String("cors"), ",") { origins[origin] = true } CORS = origins } // Init plugins for _, p := range Plugins() { p.Init(ctx) } // Init API var opts []server.Option if ctx.GlobalBool("enable_tls") { config, err := helper.TLSConfig(ctx) if err != nil { fmt.Println(err.Error()) return } opts = append(opts, server.EnableTLS(true)) opts = append(opts, server.TLSConfig(config)) } // create the router r := mux.NewRouter() s := &srv{r} var h http.Handler = s if ctx.GlobalBool("enable_stats") { st := stats.New() r.HandleFunc("/stats", st.StatsHandler) h = st.ServeHTTP(s) st.Start() defer st.Stop() } log.Printf("Registering RPC Handler at %s", RPCPath) r.HandleFunc(RPCPath, handler.RPC) switch Handler { case "rpc": log.Printf("Registering API RPC Handler at %s", APIPath) r.PathPrefix(APIPath).Handler(handler.RPCX(Namespace)) case "proxy": log.Printf("Registering API Proxy Handler at %s", ProxyPath) r.PathPrefix(ProxyPath).Handler(handler.Proxy(Namespace, false)) default: log.Printf("Registering API Default Handler at %s", APIPath) r.PathPrefix(APIPath).Handler(handler.API(Namespace)) } // reverse wrap handler plugins := append(Plugins(), plugin.Plugins()...) for i := len(plugins); i > 0; i-- { h = plugins[i-1].Handler()(h) } // create the server api := server.NewServer(Address) api.Init(opts...) api.Handle("/", h) // Initialise Server service := micro.NewService( micro.Name("go.micro.api"), micro.RegisterTTL( time.Duration(ctx.GlobalInt("register_ttl"))*time.Second, ), micro.RegisterInterval( time.Duration(ctx.GlobalInt("register_interval"))*time.Second, ), ) // Start API if err := api.Start(); err != nil { log.Fatal(err) } // Run server if err := service.Run(); err != nil { log.Fatal(err) } // Stop API if err := api.Stop(); err != nil { log.Fatal(err) } }