-
Notifications
You must be signed in to change notification settings - Fork 0
/
producer.go
38 lines (31 loc) · 934 Bytes
/
producer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package queue
import (
"fmt"
"github.com/zhiyunliu/glue/config"
)
// MqpResover 定义配置文件转换方法
type MqpResover interface {
Name() string
Resolve(setting config.Config, opts ...Option) (IMQP, error)
}
var mqpResolvers = make(map[string]MqpResover)
// RegisterProducer 注册配置文件适配器
func RegisterProducer(resolver MqpResover) {
proto := resolver.Name()
if _, ok := mqpResolvers[proto]; ok {
panic(fmt.Errorf("mqp: 不能重复注册:%s", proto))
}
mqpResolvers[proto] = resolver
}
// Deregister 清理配置适配器
func DeregisterProducer(name string) {
delete(mqpResolvers, name)
}
// NewMQP 根据适配器名称及参数返回配置处理器
func NewMQP(proto string, setting config.Config, opts ...Option) (IMQP, error) {
resolver, ok := mqpResolvers[proto]
if !ok {
return nil, fmt.Errorf("mqp: 未知的协议类型:%s", proto)
}
return resolver.Resolve(setting, opts...)
}