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últiplos goroutines.
NewGoroutine
retorna uma nova referência para Transaction
. Isso deve ser chamado sempre que você passar o Transaction
para outro goroutine que cria segmentos. Cada goroutine de criação de segmento deve ter sua própria referência Transaction
. Não importa se você chama isso antes ou depois do outro goroutine ter começado.
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 outro 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 outro goroutine:
ch := make(chan *newrelic.Transaction)go func() { txn := <-ch defer txn.StartSegment("async").End() time.Sleep(100 * time.Millisecond)}()ch <- txn.NewGoroutine()