package broker type Broker interface { Address() string Connect() error Disconnect() error Init() error Publish(string, *Message) error Subscribe(string, Handler) (Subscriber, error) } type Handler func(*Message) type Message struct { Header map[string]string Body []byte } type Subscriber interface { Topic() string Unsubscribe() error } type options struct{} type Option func(*options) var ( DefaultBroker Broker = newHttpBroker([]string{}) ) func NewBroker(addrs []string, opt ...Option) Broker { return newHttpBroker(addrs, opt...) } func Init() error { return DefaultBroker.Init() } func Connect() error { return DefaultBroker.Connect() } func Disconnect() error { return DefaultBroker.Disconnect() } func Publish(topic string, msg *Message) error { return DefaultBroker.Publish(topic, msg) } func Subscribe(topic string, handler Handler) (Subscriber, error) { return DefaultBroker.Subscribe(topic, handler) }