apache / rocketmq-client-go

Apache RocketMQ go client
https://rocketmq.apache.org/
Apache License 2.0
1.3k stars 422 forks source link

rocketmq.Producer cannot be instantiated twice #507

Closed fananchong closed 4 years ago

fananchong commented 4 years ago

My code is :

package main

import (
    "context"
    "fmt"
    "log"
    "os"
    "strconv"

    "github.com/apache/rocketmq-client-go/v2"
    "github.com/apache/rocketmq-client-go/v2/primitive"
    "github.com/apache/rocketmq-client-go/v2/producer"
    "github.com/apache/rocketmq-client-go/v2/rlog"
)

func testNewAndClose() {

    rlog.SetLogLevel("error")

    p, _ := rocketmq.NewProducer(
        producer.WithNsResovler(primitive.NewPassthroughResolver([]string{"127.0.0.1:9876"})),
        producer.WithRetry(2),
    )
    err := p.Start()
    if err != nil {
        fmt.Printf("start producer error: %s", err.Error())
        os.Exit(1)
    }
    topic := "test5"

    for i := 0; i < 1; i++ {
        msg := &primitive.Message{
            Topic: topic,
            Body:  []byte("Hello RocketMQ Go Client! " + strconv.Itoa(i)),
        }
        _, err := p.SendSync(context.Background(), msg)

        if err != nil {
            fmt.Printf("send message error: %s\n", err)
        } else {
            fmt.Printf("send message success\n")
        }
    }
    err = p.Shutdown()
    if err != nil {
        fmt.Printf("shutdown producer error: %s", err.Error())
    }
}

// Package main implements a simple producer to send message.
func main() {
    testNewAndClose()
    log.Printf("try again ...")
    testNewAndClose()
}

and output is:

fananchong@localhost:~/rocketmq-client-go/examples/producer/simple$ ./simple 
send message success
2020/07/06 10:36:34 try again ...
send message error: service close is not running, please check

The second instantiated object does not work.

RonaldFletcher commented 1 year ago

解决了吗?

fananchong commented 1 year ago

弃坑了