La possibilité de trace des segments asynchrones avec l'API NewGoroutine
est disponible à partir de la version 2.6.0 d'agent Go. Si vous ne disposez pas de la version 2.6.0 ou supérieure, mettez à jour votre agent Go vers la dernière version.
NewGoroutine
La méthode Transaction.NewGoroutine() Transaction
permet aux transactions de créer des segments dans plusieurs goroutines.
NewGoroutine
renvoie une nouvelle référence au Transaction
. Cela doit être appelé à chaque fois que vous passez le Transaction
à un autre goroutine qui crée des segments. Chaque goroutine créant un segment doit avoir sa propre référence Transaction
. Peu importe que vous appeliez ceci avant ou après que l'autre goroutine ait commencé.
Toutes les méthodes Transaction
peuvent être utilisées dans n'importe quelle référence Transaction
. Le Transaction
se terminera lorsque End()
sera appelé dans n'importe quel goroutine.
Exemple de passage d'une nouvelle référence Transaction
directement à une autre goroutine:
go func(txn *newrelic.Transaction) { defer txn.StartSegment("async").End() time.Sleep(100 * time.Millisecond)}(txn.NewGoroutine())
Exemple de passage d'une nouvelle référence Transaction
sur un canal vers un autre goroutine:
ch := make(chan *newrelic.Transaction)go func() { txn := <-ch defer txn.StartSegment("async").End() time.Sleep(100 * time.Millisecond)}()ch <- txn.NewGoroutine()