Slide 117
Slide 117 text
@PurpleBooth
type RabbitBroker interface {
Produce(*Event, map[string]string) error
}
type TracedRabbitBroker struct {
RabbitBroker RabbitBroker
context context.Context
hostname string
exchange string
}
func (t TracedRabbitBroker) Produce(event *Event, headers map[string]string) error {
span, _ := opentracing.StartSpanFromContext(t.context, "emit")
defer span.Finish()
ext.MessageBusDestination.Set(span, t.exchange)
ext.PeerHostname.Set(span, t.hostname)
ext.SpanKindConsumer.Set(span)
tracer := opentracing.GlobalTracer()
if err := tracer.Inject(span.Context(), opentracing.TextMap, opentracing.TextMapCarrier(headers)); err != nil {
ext.Error.Set(span, true)
return err
}
err := t.RabbitBroker.Produce(event, headers)
ext.Error.Set(span, err != nil)
return err
}