UserCouponConsumer.java 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package com.kym.admin.mq.consumer;
  2. import com.alibaba.fastjson2.JSONObject;
  3. import com.kym.entity.common.Queues;
  4. import com.kym.entity.miniapp.UserCoupon;
  5. import com.kym.service.miniapp.UserCouponService;
  6. import com.rabbitmq.client.Channel;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.springframework.amqp.core.Message;
  9. import org.springframework.amqp.rabbit.annotation.RabbitHandler;
  10. import org.springframework.amqp.rabbit.annotation.RabbitListener;
  11. import org.springframework.stereotype.Component;
  12. import java.io.IOException;
  13. import java.util.List;
  14. /**
  15. * 用户优惠券消费者
  16. *
  17. * @author skyline
  18. */
  19. @Slf4j
  20. @Component
  21. public class UserCouponConsumer {
  22. private final UserCouponService userCouponService;
  23. public UserCouponConsumer(UserCouponService userCouponService) {
  24. this.userCouponService = userCouponService;
  25. }
  26. @RabbitHandler
  27. @RabbitListener(queues = Queues.DELAY_USER_COUPON_QUEUE)
  28. public void userCouponHandler(List<Message> messages, Channel channel) {
  29. try {
  30. List<UserCoupon> userCouponList = messages.stream()
  31. .map(item -> JSONObject.parseObject(new String(item.getBody()), UserCoupon.class)).toList();
  32. // 存入 t_user_coupon
  33. userCouponService.saveBatch(userCouponList);
  34. // todo 推送用户收到优惠券
  35. // 消息逐个ack
  36. for (Message message : messages) {
  37. channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
  38. }
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. }