github.com/qxnw/lib4go@v0.0.0-20180426074627-c80c7e84b925/mq/mq.producer.go (about) 1 package mq 2 3 import ( 4 "fmt" 5 "sync/atomic" 6 "time" 7 ) 8 9 type ProcuderMessage struct { 10 Headers []string 11 Queue string 12 Data string 13 SendTimes int32 14 Timeout time.Duration 15 } 16 17 func (p *ProcuderMessage) AddSendTimes() { 18 atomic.AddInt32(&p.SendTimes, 1) 19 } 20 21 type MQProducer interface { 22 Connect() error 23 GetBackupMessage() chan *ProcuderMessage 24 Send(queue string, msg string, timeout time.Duration) (err error) 25 Close() 26 } 27 28 //MQConsumerResover 定义配置文件转换方法 29 type MQProducerResover interface { 30 Resolve(address string, opts ...Option) (MQProducer, error) 31 } 32 33 var mqProducerResolvers = make(map[string]MQProducerResover) 34 35 //RegisterProducer 注册配置文件适配器 36 func RegisterProducer(proto string, resolver MQProducerResover) { 37 if resolver == nil { 38 panic("mq: Register adapter is nil") 39 } 40 if _, ok := mqProducerResolvers[proto]; ok { 41 panic("mq: Register called twice for adapter " + proto) 42 } 43 mqProducerResolvers[proto] = resolver 44 } 45 46 //NewMQProducer 根据适配器名称及参数返回配置处理器 47 func NewMQProducer(address string, opts ...Option) (MQProducer, error) { 48 proto, addrs, err := getMQNames(address) 49 if err != nil { 50 return nil, err 51 } 52 resolver, ok := mqProducerResolvers[proto] 53 if !ok { 54 return nil, fmt.Errorf("mq: unknown adapter name %q (forgotten import?)", proto) 55 } 56 return resolver.Resolve(addrs[0], opts...) 57 }