Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
Василий Толстов 2025-01-30 12:40:44 +03:00
parent 58a50440e6
commit 77558d7ec7
4 changed files with 38 additions and 23 deletions
broker/memory
metadata
register/memory

@ -210,8 +210,15 @@ func (b *Broker) publish(ctx context.Context, topic string, messages ...broker.M
} }
case func(broker.Message) error: case func(broker.Message) error:
for _, message := range messages { for _, message := range messages {
if err = s(message); err == nil && sub.opts.AutoAck { msg, ok := message.(*memoryMessage)
err = message.Ack() if !ok {
if b.opts.Logger.V(logger.ErrorLevel) {
b.opts.Logger.Error(ctx, "broker handler error", broker.ErrInvalidMessage)
}
}
msg.topic = topic
if err = s(msg); err == nil && sub.opts.AutoAck {
err = msg.Ack()
} }
if err != nil { if err != nil {
if b.opts.Logger.V(logger.ErrorLevel) { if b.opts.Logger.V(logger.ErrorLevel) {

@ -4,6 +4,7 @@ import (
"context" "context"
"fmt" "fmt"
"net/textproto" "net/textproto"
"sort"
"strings" "strings"
) )
@ -464,27 +465,29 @@ type Iterator struct {
cnt int cnt int
} }
/*
// Next advance iterator to next element // Next advance iterator to next element
func (iter *Iterator) Next(k, v *string) bool { func (iter *Iterator) Next(k *string, v *[]string) bool {
if iter.cur+1 > iter.cnt { if iter.cur+1 > iter.cnt {
return false return false
} }
*k = iter.keys[iter.cur] if k != nil && v != nil {
*v = iter.Metadata[*k] *k = iter.keys[iter.cur]
iter.cur++ vv := iter.md[*k]
*v = make([]string, len(vv))
copy(*v, vv)
iter.cur++
}
return true return true
} }
// Iterator returns the itarator for metadata in sorted order // Iterator returns the itarator for metadata in sorted order
func (Metadata Metadata) Iterator() *Iterator { func (md Metadata) Iterator() *Iterator {
iter := &Iterator{Metadata: Metadata, cnt: len(Metadata)} iter := &Iterator{md: md, cnt: len(md)}
iter.keys = make([]string, 0, iter.cnt) iter.keys = make([]string, 0, iter.cnt)
for k := range Metadata { for k := range md {
iter.keys = append(iter.keys, k) iter.keys = append(iter.keys, k)
} }
sort.Strings(iter.keys) sort.Strings(iter.keys)
return iter return iter
} }
*/

@ -102,22 +102,27 @@ func TestPassing(t *testing.T) {
} }
} }
/* func TestIterator(t *testing.T) {
func TestIterator(_ *testing.T) { md := Pairs(
md := Metadata{ "1Last", "last",
"1Last": "last", "2First", "first",
"2First": "first", "3Second", "second",
"3Second": "second", )
}
iter := md.Iterator() iter := md.Iterator()
var k, v string var k string
var v []string
chk := New(3)
for iter.Next(&k, &v) { for iter.Next(&k, &v) {
// fmt.Printf("k: %s, v: %s\n", k, v) chk[k] = v
}
for k, v := range chk {
if cv, ok := md[k]; !ok || len(cv) != len(v) || cv[0] != v[0] {
t.Fatalf("XXXX %#+v %#+v", chk, md)
}
} }
} }
*/
func TestMedataCanonicalKey(t *testing.T) { func TestMedataCanonicalKey(t *testing.T) {
md := New(1) md := New(1)

@ -7,7 +7,7 @@ import (
"testing" "testing"
"time" "time"
"go.unistack.org/micro/v3/register" "go.unistack.org/micro/v4/register"
) )
var testData = map[string][]*register.Service{ var testData = map[string][]*register.Service{