package main

import (
	"flag"
	"fmt"
	"github.com/apache/rocketmq-client-go/core"
)

var (
	namesrvAddrs string
	topic        string
	body         string
	groupID      string
	keys         string
)

func init() {
	flag.StringVar(&namesrvAddrs, "addr", "", "name server address")
	flag.StringVar(&topic, "t", "", "topic name")
	flag.StringVar(&groupID, "group", "", "producer group")
	flag.StringVar(&body, "body", "", "message body")
	flag.StringVar(&keys, "keys", "", "message keys")

}

func main() {
	flag.Parse()
	if namesrvAddrs == "" {
		println("empty nameServer address")
		return
	}

	if topic == "" {
		println("empty topic")
		return
	}

	if body == "" {
		println("empty body")
		return
	}

	if groupID == "" {
		println("empty groupID")
		return
	}

	cfg := &rocketmq.ProducerConfig{}
	cfg.GroupID = groupID
	cfg.NameServer = namesrvAddrs

	producer, _ := rocketmq.NewProducer(cfg)
	producer.Start()
	defer producer.Shutdown()

	result := producer.SendMessageSync(&rocketmq.Message{Topic: topic, Body: body, Keys: keys})
	println(fmt.Sprintf("send message result: %s", result))
}
