Contexte délai de mise en œuvre sur chaque demande d'aide de golang

Je suis en train de gérer contexte délai d'attente pour chaque demande. Nous avons de serveur suivants structures:

Contexte délai de mise en œuvre sur chaque demande d'aide de golang

Flux aperçu:

Aller Serveur: Fondamentalement, agit comme un [Reverse-proxy].Deux

Auth Server: Vérifier les demandes d'Authentification.

Serveur d'Application: de Base du traitement de la demande de la logique.

Maintenant, si le serveur d'Autorisation ne pouvez pas en mesure de traiter les demandes dans les délais prévus, alors je veux fermer la goroutine de la mémoire.

Voici ce que j'ai essayé:

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
req, _ := http.NewRequest("GET", authorizationServer, nil)
req.Header = r.Header
req.WithContext(ctx)
res, error := client.Do(req)
select {
case <-time.After(10 * time.Second):
    fmt.Println("overslept")
case <-ctx.Done():
    fmt.Println(ctx.Err()) //prints "context deadline exceeded"
}

Ici, le contexte renvoie "date limite dépassée", si la demande n'est pas traitée dans les délais prévus. Mais Il continue à traiter cette demande et le retour de la réponse plus que de temps spécifié. Alors, Comment puis-je arrêter de demande de débit(goroutine), quand le temps dépassé.

Bien que j'ai également mis en œuvre complet de demande doit être traitée dans les 60 secondes avec ce code:

var netTransport = &http.Transport{
    Dial: (&net.Dialer{
        Timeout: 60 * time.Second,
    }).Dial,
    TLSHandshakeTimeout: 60 * time.Second,
}
client := &http.Client{
    Timeout:   time.Second * 60,
    Transport: netTransport,
    CheckRedirect: func(req *http.Request, via []*http.Request) error {
        return http.ErrUseLastResponse
    },
}

Donc ai-je besoin de séparer contexte des implémentations ainsi? Merci d'avance pour l'aide.

Note1: Ça va être génial, Si nous pouvons gérer délai sur toutes les demandes(goroutine) créé par le serveur HTTP, en utilisant le contexte.

OriginalL'auteur Avinash | 2017-04-10