实现七月迭代公共技术基础
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m20s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m20s
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/break/junhong_cmp_fiber/pkg/asynctask"
|
||||
"github.com/break/junhong_cmp_fiber/pkg/config"
|
||||
"github.com/break/junhong_cmp_fiber/pkg/constants"
|
||||
"github.com/bytedance/sonic"
|
||||
@@ -39,10 +40,10 @@ func NewClient(redisClient *redis.Client, logger *zap.Logger) *Client {
|
||||
// payload 必须传入 struct 或 map,禁止传入 []byte。
|
||||
// 传入 []byte 会导致 sonic.Marshal 将其 base64 编码,handler 解析时类型不匹配。
|
||||
func (c *Client) EnqueueTask(ctx context.Context, taskType string, payload interface{}, opts ...asynq.Option) error {
|
||||
if _, ok := payload.([]byte); ok {
|
||||
if err := asynctask.ValidatePayload(payload); err != nil {
|
||||
c.logger.Error("任务载荷类型错误,禁止传入 []byte",
|
||||
zap.String("task_type", taskType))
|
||||
return fmt.Errorf("task payload must be struct or map, got []byte")
|
||||
zap.String("task_type", taskType), zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
// 内部统一序列化,调用方无需预先 Marshal
|
||||
|
||||
17
pkg/queue/client_test.go
Normal file
17
pkg/queue/client_test.go
Normal file
@@ -0,0 +1,17 @@
|
||||
package queue
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func TestEnqueueTaskRejectsPreSerializedBytesBeforeQueueAccess(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
client := &Client{logger: zap.NewNop()}
|
||||
if err := client.EnqueueTask(context.Background(), "test:bytes", []byte(`{"task_id":1}`)); err == nil {
|
||||
t.Fatal("预序列化 []byte 载荷必须在访问 Asynq 前被拒绝")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user