Go语言消息队列实战案例:订单系统与秒杀系统
Go语言消息队列实战案例订单系统与秒杀系统1. 订单系统架构type OrderService struct { producer *KafkaProducer consumer *KafkaConsumer } func NewOrderService() *OrderService { return OrderService{} } func (s *OrderService) CreateOrder(order *Order) error { msg, _ : json.Marshal(order) return s.producer.SendMessage(order.ID, msg) } func (s *OrderService) ProcessOrder(ctx context.Context, msg []byte) error { var order Order if err : json.Unmarshal(msg, order); err ! nil { return err } if err : s.payOrder(order); err ! nil { return s.publishPaymentFailed(order.ID, err) } return s.publishOrderCreated(order) } func (s *OrderService) payOrder(order *Order) error { return nil } func (s *OrderService) publishPaymentFailed(orderID string, err error) error { return nil } func (s *OrderService) publishOrderCreated(order Order) error { return nil }2. 秒杀系统架构type SeckillService struct { producer *KafkaProducer stockClient *RedisClient rateLimiter *RateLimiter } func NewSeckillService() *SeckillService { return SeckillService{} } func (s *SeckillService) Seckill(ctx context.Context, userID, productID string) error { if !s.rateLimiter.Allow(ctx, userID) { return ErrRateLimit } stock, err : s.stockClient.Decr(ctx, productID) if err ! nil { return err } if stock 0 { s.stockClient.Incr(ctx, productID) return ErrSoldOut } seckillMsg, _ : json.Marshal(SeckillMessage{ UserID: userID, ProductID: productID, Timestamp: time.Now(), }) return s.producer.SendAsync(seckillMsg) }3. 总结本文通过订单系统和秒杀系统的案例展示了消息队列在实际业务中的应用场景和实现方法。