feat: adjust async code

This commit is contained in:
engigu
2024-01-14 15:14:51 +08:00
parent 73db03ef7c
commit 8a88a3ed3e
5 changed files with 25 additions and 60 deletions
-43
View File
@@ -1,43 +0,0 @@
package send_message_service
import (
"github.com/sirupsen/logrus"
"message-nest/pkg/constant"
"sync"
)
var maxBufferSize = 10
var Buffer = make(chan SendMessageService, maxBufferSize)
func DoSendTask(task SendMessageService, wg *sync.WaitGroup) {
defer wg.Done()
defer func() {
if r := recover(); r != nil {
logrus.Error("DoSendTask: Recovered from panic:", r)
}
}()
constant.MaxSemaphore <- struct{}{}
defer func() {
<-constant.MaxSemaphore
}()
go task.Send()
}
func MessageConsumer(wg *sync.WaitGroup) {
defer wg.Done()
for {
task, ok := <-Buffer
if !ok {
logrus.Error("MessageConsumer: Channel closed. Exiting.")
return
}
wg.Add(1)
go DoSendTask(task, wg)
}
}
@@ -4,6 +4,7 @@ import (
"fmt"
"github.com/sirupsen/logrus"
"message-nest/models"
"message-nest/pkg/constant"
"message-nest/service/send_task_service"
"message-nest/service/send_way_service"
"strings"
@@ -14,6 +15,10 @@ const (
SendFail = 0
)
//var logger = logrus.WithFields(logrus.Fields{
// "prefix": "[Message]",
//})
func errStrIsSuccess(errStr string) int {
if errStr == "" {
return SendSuccess
@@ -41,6 +46,23 @@ func (sm *SendMessageService) LogsAndStatusMark(errStr string, status int) {
logrus.Infof("%s, 状态:%d", strings.Trim(errStr, "\n"), status)
}
// AsyncSend 异步发送一个消息任务的所有实例
func (sm *SendMessageService) AsyncSend() {
defer func() {
if r := recover(); r != nil {
logrus.Error("AsyncSend: Recovered from panic:", r)
}
}()
// 限制并发异步发送数量
constant.MaxSendTaskSemaphoreChan <- ""
defer func() {
<-constant.MaxSendTaskSemaphoreChan
}()
go sm.Send()
}
// Send 发送一个消息任务的所有实例
func (sm *SendMessageService) Send() string {
sm.Status = SendSuccess