| @@ -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{ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user