Files
toutoukan/rocketmq/killmq/mqproducer/killProducer.go
JACKYMYPERSON 2ab7614ea0 修改秒杀
2025-09-14 21:12:37 +08:00

65 lines
1.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package mqproducer
import (
"context"
"encoding/json"
"github.com/apache/rocketmq-client-go/v2"
"github.com/apache/rocketmq-client-go/v2/primitive"
"github.com/apache/rocketmq-client-go/v2/producer"
"log"
"sync"
"toutoukan/model/usermodel/userOrder"
)
var normalProducer rocketmq.Producer
var producerInitOnce sync.Once // 用于保证生产者只初始化一次
// 发送普通消息
func SendNormalMessage(OrderId string, GoodsID string, UserID int) error {
var initErr error
// 使用 sync.Once 保证生产者只初始化一次
producerInitOnce.Do(func() {
normalProducer, initErr = rocketmq.NewProducer(
producer.WithNameServer([]string{"127.0.0.1:9876"}), // RocketMQ namesrv 地址
producer.WithGroupName("order_producer_group"), // 生产者组名
)
if initErr != nil {
log.Fatalf("初始化普通生产者失败: %v", initErr)
return
}
if initErr = normalProducer.Start(); initErr != nil {
log.Fatalf("启动普通生产者失败: %v", initErr)
return
}
})
// 若初始化过程有错误,直接返回
if initErr != nil {
log.Printf("生产者初始化失败: %v", initErr)
return initErr
}
// 构造消息内容
msgData := userOrder.OrderMessage{
OrderID: OrderId,
GoodsID: GoodsID,
UserID: UserID,
Quantity: 1,
}
msgBody, _ := json.Marshal(msgData)
// 创建消息(指定主题和内容)
msg := primitive.NewMessage("killgoods", msgBody) // 主题需提前创建或开启自动创建
// 发送消息(同步发送,等待结果)
result, err := normalProducer.SendSync(context.Background(), msg)
if err != nil {
log.Printf("普通消息发送失败: %v", err)
return err
}
log.Printf("普通消息发送成功消息ID: %s, 队列: %d, 偏移量: %d",
result.MsgID, result.MessageQueue.QueueId, result.QueueOffset)
return nil
}