func New(config *Config) (*C, error) { c := &C{ config: config, topics: newTopicPartitions(), pool: newBrokerPool(func(addr string) *broker.B { cfg := config.BrokerConfig cfg.Connection.Addr = addr return broker.New(&cfg) }), } for _, addr := range config.Brokers { c.pool.AddAddr(addr) } return c, nil }
func main() { var cfg Config flag.StringVar(&cfg.Broker, "broker", "", "broker address") // get subcommand if len(os.Args) < 2 { usage() os.Exit(1) } subCmd := os.Args[1] os.Args = append(os.Args[0:1], os.Args[2:]...) switch subCmd { case "meta": var topicsArg string flag.StringVar(&topicsArg, "topics", "", "topic names seperated by comma") flag.Parse() br := broker.New(broker.DefaultConfig().WithAddr(cfg.Broker)) cfg.Meta.Topics = strings.Split(topicsArg, ",") if err := meta(br, &cfg.Meta); err != nil { log.Fatal(err) } case "coord": flag.StringVar(&cfg.Coord.GroupName, "group", "", "group name") flag.Parse() br := broker.New(broker.DefaultConfig().WithAddr(cfg.Broker)) if err := coord(br, &cfg.Coord); err != nil { log.Fatal(err) } case "offset": flag.StringVar(&cfg.Offset.GroupName, "group", "", "group name") flag.StringVar(&cfg.Offset.Topic, "topic", "", "topic name") flag.IntVar(&cfg.Offset.Partition, "partition", 0, "partition") flag.Parse() br := broker.New(broker.DefaultConfig().WithAddr(cfg.Broker)) if err := offset(br, &cfg.Offset); err != nil { log.Fatal(err) } case "commit": flag.StringVar(&cfg.Commit.GroupName, "group", "", "group name") flag.StringVar(&cfg.Commit.Topic, "topic", "", "topic name") flag.IntVar(&cfg.Commit.Partition, "partition", 0, "partition") flag.IntVar(&cfg.Commit.Offset, "offset", 0, "offset") flag.IntVar(&cfg.Commit.Retention, "retention", 0, "retention") flag.Parse() br := broker.New(broker.DefaultConfig().WithAddr(cfg.Broker)) if err := commit(br, &cfg.Commit); err != nil { log.Fatal(err) } case "time": flag.StringVar(&cfg.Offset.Topic, "topic", "", "topic name") flag.IntVar(&cfg.Offset.Partition, "partition", 0, "partition") flag.IntVar(&cfg.Offset.Partition, "time", 0, "time") flag.Parse() br := broker.New(broker.DefaultConfig().WithAddr(cfg.Broker)) if err := timeOffset(br, &cfg.Time); err != nil { log.Fatal(err) } case "consume": flag.StringVar(&cfg.Consume.Topic, "topic", "", "topic name") flag.IntVar(&cfg.Consume.Partition, "partition", 0, "partition") flag.IntVar(&cfg.Consume.Offset, "offset", 0, "offset") flag.Parse() br := broker.New(broker.DefaultConfig().WithAddr(cfg.Broker)) if err := consume(br, &cfg.Consume); err != nil { log.Fatal(err) } default: log.Fatalf("invalid subcommand %s", subCmd) } }