youzan/nsq

正常队列,客户端消费时误配置了EnableOrdered,但是客户端再将参数改回后,消息还是异常的

Closed this issue · 1 comments

最新 release 版 youzan/nsq server(v0.3.7-HA.1.9.4.1) + 最新版 youzan/go-nsq client (go-nsq v1.3.6-HA)

正常队列,客户端消费时误配置了EnableOrdered,但是客户端再将参数改回后,消息还是异常的。

package main

import (
	"fmt"
	"time"

	"github.com/youzan/go-nsq"
)

func main() {
	addr := "172.16.0.30:4161"

	config := nsq.NewConfig()
	config.MaxAttempts = 65535

	mgr, err := nsq.NewTopicProducerMgr([]string{"delay_test"}, config)
	if err != nil {
		panic(err)
	}

	mgr.ConnectToNSQLookupd(addr)
	err = mgr.Publish("delay_test", []byte("hello, "+time.Now().String()))
	if err != nil {
		panic(err)
	}

	// topic:delay_test 未开启order, 此处误操作,配置了 EnableOrdered 后续即便参数改回来,该 channel 的行为还是异常的
	config.EnableOrdered = true

	c, err := nsq.NewConsumer("delay_test", "default", config)
	if err != nil {
		panic(err)
	}

	c.AddConcurrentHandlers(nsq.HandlerFunc(func(msg *nsq.Message) error {
		fmt.Println(string(msg.Body), msg.Attempts)
		msg.RequeueWithoutBackoff(time.Second)
		return nil
	}), 1)

	err = c.ConnectToNSQLookupd(addr)
	if err != nil {
		panic(err)
	}

	select {}
}

客户端的channel顺序消费参数只能从非顺序改成顺序, 需要改回非顺序的话, 除了需要客户端改回非顺序外, 还需要给对应的nsqd节点发送http接口:

POST /channel/setorder?order=false