type Request struct {
Name string
}
type XxHandler struct {
RequestQueue chan *Request
}
func (o *XxHandler) String() string {
if b, err := json.Marshal(o); err != nil {
return ""
} else {
return string(b)
}
}
// Start 启动队列监听
func (o *XxHandler) Start() {
go func() {
for request := range o.RequestQueue {
go o.Process(request)
}
}()
}
// AppendTask 向队列中增加task
func (o *XxHandler) AppendTask(request *Request) {
if request == nil {
return
}
o.RequestQueue <- request
}
// Stop 关闭队列
func (o *XxHandler) Stop() {
close(o.RequestQueue)
}
func newIns() *XxHandler {
return &XxHandler{
RequestQueue: make(chan *Request, 10),
}
}
var ins *XxHandler
// GetXxHandler 获取 实例
func GetXxHandler() *XxHandler {
if ins == nil {
ins = newIns()
}
return ins
}
// Process 处理队列中的任务
func (o *XxHandler) Process(request *Request) {
// do something
}
func TestXxHandler(t *testing.T) {
GetXxHandler().Start()
GetXxHandler().AppendTask(&Request{Name: "xx"})
}