github.com/qxnw/lib4go@v0.0.0-20180426074627-c80c7e84b925/mq/mq.consumer.go (about) 1 package mq 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 type MQConsumer interface { 9 Connect() error 10 Consume(queue string, concurrency int, callback func(IMessage)) (err error) 11 UnConsume(queue string) 12 Close() 13 } 14 15 //MQConsumerResover 定义配置文件转换方法 16 type MQConsumerResover interface { 17 Resolve(address string, opts ...Option) (MQConsumer, error) 18 } 19 20 var mqConsumerResolvers = make(map[string]MQConsumerResover) 21 22 //RegisterCosnumer 注册配置文件适配器 23 func RegisterCosnumer(adapter string, resolver MQConsumerResover) { 24 if resolver == nil { 25 panic("mq: Register adapter is nil") 26 } 27 if _, ok := mqConsumerResolvers[adapter]; ok { 28 panic("mq: Register called twice for adapter " + adapter) 29 } 30 mqConsumerResolvers[adapter] = resolver 31 } 32 33 //NewMQConsumer 根据适配器名称及参数返回配置处理器 34 func NewMQConsumer(address string, opts ...Option) (MQConsumer, error) { 35 proto, addrs, err := getMQNames(address) 36 if err != nil { 37 return nil, err 38 } 39 resolver, ok := mqConsumerResolvers[proto] 40 if !ok { 41 return nil, fmt.Errorf("mq: unknown adapter name %q (forgotten import?)", proto) 42 } 43 return resolver.Resolve(addrs[0], opts...) 44 } 45 func getMQNames(address string) (proto string, raddr []string, err error) { 46 addr := strings.Split(address, "://") 47 if len(addr) > 2 { 48 return "", nil, fmt.Errorf("MQ地址配置错误%s,格式:stomp://192.168.0.1:61613", addr) 49 } 50 if len(addr[0]) == 0 { 51 return "", nil, fmt.Errorf("MQ地址配置错误%s,格式:stomp://192.168.0.1:61613", addr) 52 } 53 proto = addr[0] 54 if len(addr) > 1 { 55 raddr = strings.Split(addr[1], ",") 56 } else { 57 raddr = append(raddr, "") 58 } 59 return 60 }