A capacidade de trace segmentos assíncronos com a API NewGoroutine
está disponível a partir da versão 2.6.0 do agente Go. Se você não tiver a versão 2.6.0 ou superior, atualize seu agente Go para a versão mais recente.
NewGoroutine
O método Transaction.NewGoroutine() Transaction
permite que a transação crie segmentos em múltiplas goroutines.
NewGoroutine
retorna uma nova referência para Transaction
. Isso deve ser chamado sempre que você passar o Transaction
para outra goroutine que cria segmentos. Cada goroutine criadora de segmento deve ter sua própria referência Transaction
. Não importa se você chama isso antes ou depois do início da outra goroutine.
Todos os métodos Transaction
podem ser usados em qualquer referência Transaction
. O Transaction
terminará quando End()
for chamado em qualquer goroutine.
Exemplo passando uma nova referência Transaction
diretamente para outra goroutine:
go func(txn *newrelic.Transaction) { defer txn.StartSegment("async").End() time.Sleep(100 * time.Millisecond)}(txn.NewGoroutine())
Exemplo passando uma nova referência Transaction
em um canal para outra goroutine:
ch := make(chan *newrelic.Transaction)go func() { txn := <-ch defer txn.StartSegment("async").End() time.Sleep(100 * time.Millisecond)}()ch <- txn.NewGoroutine()