66 lines
2.2 KiB
Go
66 lines
2.2 KiB
Go
package nats
|
|
|
|
import (
|
|
"context"
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
)
|
|
|
|
// NatsMessageConfig nats Stream 消息配置
|
|
type NatsMessageConfig struct {
|
|
CreateTaskStreamName string
|
|
CreateTaskSubjects []string
|
|
PublishSubject string
|
|
CreateTaskConsumerName string
|
|
MsgCount int
|
|
HandleFunc func(ctx context.Context, message map[string]interface{}) error
|
|
}
|
|
|
|
// MessageConfig 消息配置接口
|
|
type MessageConfig interface {
|
|
createTaskStream(ctx context.Context) error
|
|
publish(ctx context.Context, data interface{}) error
|
|
createTaskConsumer(ctx context.Context) error
|
|
//startConsumer(ctx context.Context, handleFunc func(ctx context.Context, msg *nats.Msg) error) error
|
|
}
|
|
|
|
func (n *NatsMessageConfig) createTaskStream(ctx context.Context) error {
|
|
return createTaskStreamSimple(ctx, n.CreateTaskStreamName, n.CreateTaskSubjects)
|
|
}
|
|
|
|
// CreateTaskStreamBatch 批量创建任务消息队列流
|
|
func CreateTaskStreamBatch(ctx context.Context, configs ...MessageConfig) error {
|
|
for _, cfg := range configs {
|
|
if err := cfg.createTaskStream(ctx); err != nil {
|
|
return gerror.Wrap(err, "创建任务消息队列流失败")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (n *NatsMessageConfig) publish(ctx context.Context, data interface{}) error {
|
|
return publish(ctx, n.PublishSubject, data)
|
|
}
|
|
|
|
// PublishMessage 发布消息(统一入口)
|
|
func PublishMessage(ctx context.Context, cfg MessageConfig, data interface{}) (err error) {
|
|
return cfg.publish(ctx, data)
|
|
}
|
|
|
|
func (n *NatsMessageConfig) createTaskConsumer(ctx context.Context) error {
|
|
return CreateConsumerPushMode(ctx, n.CreateTaskStreamName, n.CreateTaskConsumerName, n.PublishSubject, n.MsgCount)
|
|
}
|
|
|
|
// CreateTaskConsumerBatch 批量创建任务消息队列消费者
|
|
func CreateTaskConsumerBatch(ctx context.Context, configs ...MessageConfig) error {
|
|
for _, cfg := range configs {
|
|
if err := cfg.createTaskConsumer(ctx); err != nil {
|
|
return gerror.Wrap(err, "创建任务消息队列流失败")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
//func (n *NatsMessageConfig) startConsumer(ctx context.Context, handleFunc func(ctx context.Context, msg *nats.Msg) error) error {
|
|
// return ConsumeMessages(ctx, n.CreateTaskStreamName, n.CreateTaskConsumerName, handleFunc)
|
|
//}
|