Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
25dda1f34c | |||
fe66086c40 | |||
7329bc23bc | |||
c240631cdb |
6
event.go
6
event.go
@@ -1,12 +1,14 @@
|
||||
package kgo
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
|
||||
"go.unistack.org/micro/v3/broker"
|
||||
)
|
||||
|
||||
type event struct {
|
||||
ctx context.Context
|
||||
topic string
|
||||
err error
|
||||
sync.RWMutex
|
||||
@@ -14,6 +16,10 @@ type event struct {
|
||||
ack bool
|
||||
}
|
||||
|
||||
func (p *event) Context() context.Context {
|
||||
return p.ctx
|
||||
}
|
||||
|
||||
func (p *event) Topic() string {
|
||||
return p.topic
|
||||
}
|
||||
|
8
kgo.go
8
kgo.go
@@ -98,8 +98,10 @@ func (k *Broker) connect(ctx context.Context, opts ...kgo.Opt) (*kgo.Client, err
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
if ctx.Err() != nil {
|
||||
if sp != nil {
|
||||
sp.SetStatus(tracer.SpanStatusError, ctx.Err().Error())
|
||||
}
|
||||
}
|
||||
return nil, ctx.Err()
|
||||
default:
|
||||
c, err = kgo.NewClient(opts...)
|
||||
@@ -107,7 +109,9 @@ func (k *Broker) connect(ctx context.Context, opts ...kgo.Opt) (*kgo.Client, err
|
||||
err = c.Ping(ctx) // check connectivity to cluster
|
||||
}
|
||||
if err != nil {
|
||||
if sp != nil {
|
||||
sp.SetStatus(tracer.SpanStatusError, err.Error())
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
@@ -230,10 +234,6 @@ func (k *Broker) Publish(ctx context.Context, topic string, msg *broker.Message,
|
||||
}
|
||||
|
||||
func (k *Broker) publish(ctx context.Context, msgs []*broker.Message, opts ...broker.PublishOption) error {
|
||||
var span tracer.Span
|
||||
ctx, span = k.opts.Tracer.Start(ctx, "Publish")
|
||||
defer span.Finish()
|
||||
|
||||
k.Lock()
|
||||
if !k.connected {
|
||||
c, err := k.connect(ctx, k.kopts...)
|
||||
|
@@ -12,6 +12,7 @@ import (
|
||||
"go.unistack.org/micro/v3/logger"
|
||||
"go.unistack.org/micro/v3/metadata"
|
||||
"go.unistack.org/micro/v3/semconv"
|
||||
"go.unistack.org/micro/v3/tracer"
|
||||
)
|
||||
|
||||
type tp struct {
|
||||
@@ -106,10 +107,8 @@ func (s *subscriber) poll(ctx context.Context) {
|
||||
}
|
||||
|
||||
s.Lock()
|
||||
for tp := range s.consumers {
|
||||
if v, ok := lmap[tp.p]; ok {
|
||||
s.kopts.Meter.Counter(semconv.BrokerGroupLag, "topic", s.topic, "group", s.opts.Group, "partition", strconv.Itoa(int(tp.p)), "lag", strconv.Itoa(int(v.Lag)))
|
||||
}
|
||||
for p, l := range lmap {
|
||||
s.kopts.Meter.Counter(semconv.BrokerGroupLag, "topic", s.topic, "group", s.opts.Group, "partition", strconv.Itoa(int(p)), "lag", strconv.Itoa(int(l.Lag)))
|
||||
}
|
||||
s.Unlock()
|
||||
|
||||
@@ -221,6 +220,8 @@ func (pc *consumer) consume() {
|
||||
p.err = nil
|
||||
p.ack = false
|
||||
p.msg.Header = metadata.New(len(record.Headers))
|
||||
p.ctx = record.Context
|
||||
sp, _ := tracer.SpanFromContext(p.ctx)
|
||||
for _, hdr := range record.Headers {
|
||||
p.msg.Header.Set(hdr.Key, string(hdr.Value))
|
||||
}
|
||||
@@ -229,7 +230,11 @@ func (pc *consumer) consume() {
|
||||
} else if pc.opts.BodyOnly {
|
||||
p.msg.Body = record.Value
|
||||
} else {
|
||||
if err := pc.kopts.Codec.Unmarshal(record.Value, p.msg); err != nil {
|
||||
sp.AddEvent("codec unmarshal start")
|
||||
err := pc.kopts.Codec.Unmarshal(record.Value, p.msg)
|
||||
sp.AddEvent("codec unmarshal stop")
|
||||
if err != nil {
|
||||
sp.SetStatus(tracer.SpanStatusError, err.Error())
|
||||
pc.kopts.Meter.Counter(semconv.SubscribeMessageTotal, "endpoint", record.Topic, "topic", record.Topic, "status", "failure").Inc()
|
||||
p.err = err
|
||||
p.msg.Body = record.Value
|
||||
@@ -259,13 +264,17 @@ func (pc *consumer) consume() {
|
||||
pc.kopts.Meter.Histogram(semconv.SubscribeMessageDurationSeconds, "endpoint", record.Topic, "topic", record.Topic).Update(te.Seconds())
|
||||
eventPool.Put(p)
|
||||
pc.kopts.Logger.Fatalf(pc.kopts.Context, "[kgo] Unmarshal err not handled wtf?")
|
||||
sp.Finish()
|
||||
return
|
||||
}
|
||||
}
|
||||
sp.AddEvent("handler start")
|
||||
err := pc.handler(p)
|
||||
sp.AddEvent("handler stop")
|
||||
if err == nil {
|
||||
pc.kopts.Meter.Counter(semconv.SubscribeMessageTotal, "endpoint", record.Topic, "topic", record.Topic, "status", "success").Inc()
|
||||
} else {
|
||||
sp.SetStatus(tracer.SpanStatusError, err.Error())
|
||||
pc.kopts.Meter.Counter(semconv.SubscribeMessageTotal, "endpoint", record.Topic, "topic", record.Topic, "status", "failure").Inc()
|
||||
}
|
||||
pc.kopts.Meter.Counter(semconv.SubscribeMessageInflight, "endpoint", record.Topic, "topic", record.Topic).Dec()
|
||||
@@ -274,7 +283,9 @@ func (pc *consumer) consume() {
|
||||
} else if err != nil {
|
||||
p.err = err
|
||||
if eh != nil {
|
||||
sp.AddEvent("error handler start")
|
||||
_ = eh(p)
|
||||
sp.AddEvent("error handler stop")
|
||||
} else {
|
||||
if pc.kopts.Logger.V(logger.ErrorLevel) {
|
||||
pc.kopts.Logger.Errorf(pc.kopts.Context, "[kgo]: subscriber error: %v", err)
|
||||
@@ -290,8 +301,11 @@ func (pc *consumer) consume() {
|
||||
} else {
|
||||
eventPool.Put(p)
|
||||
pc.kopts.Logger.Fatalf(pc.kopts.Context, "[kgo] ErrLostMessage wtf?")
|
||||
sp.SetStatus(tracer.SpanStatusError, "ErrLostMessage")
|
||||
sp.Finish()
|
||||
return
|
||||
}
|
||||
sp.Finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user