func prepareServer(serviceName string) *httptest.Server { // wir schreiben einen fake server. Dieser server stellt den eigentlichen service dar, // an den du deine Requests weiterleiten möchtest (beispielsweise der authentication-service). // Falls er angesprochen wird soll er den Statuscode 418 (im a teapot) zurückgesendet. serviceHandler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusTeapot) })) server := httptest.NewServer(serviceHandler) // der servicecache wird so konfiguriert, dass er immer die url des eben erstellten server zurückliefert. // Wir umgehen somit die periodischen Anfragen an den discovery-service. fakeRetriever := func(consulAddress string) (map[string]*api.AgentService, error) { services := make(map[string]*api.AgentService) serviceUrl, _ := url.Parse(server.URL) parts := strings.Split(serviceUrl.Host, ":") host := parts[0] port, _ := strconv.Atoi(parts[1]) services[serviceName] = createService(serviceName+"1", serviceName, port, host, "public", "interactive-lecture") return services, nil } // wir configurieren den cache und bauen anschließend unseren mock-retreiver ein. cache, _ := servicecache.Configure("discovery:8500", 1*time.Millisecond, serviceName) cache.SetServiceRetriever(fakeRetriever) return server }
func main() { r := mux.NewRouter() servicecache.Configure("discovery:8500", 10*time.Second, "authentication-service", "lecture-service") //serviceclient.Configure(cacheadapter.New("discovery:8500", 10*time.Second, 5*time.Second, 3)) servicecache.Start(3, 5*time.Second) log.Println("listening on 8000") // Bind to a port and pass our router in http.ListenAndServe(":8000", r) }