diff --git a/mcwl-admin/src/main/resources/application-druid.yml b/mcwl-admin/src/main/resources/application-druid.yml index 7c442bc..a1c90fd 100644 --- a/mcwl-admin/src/main/resources/application-druid.yml +++ b/mcwl-admin/src/main/resources/application-druid.yml @@ -10,7 +10,7 @@ spring: listener: simple: prefetch: 1 # 每次之能获取一条 - acknowledge-mode: auto # 设置消费端手动ack确认 + acknowledge-mode: manual # 设置消费端手动ack确认 retry: enabled: true # 是否支持重试 # 生产者配置 diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java index 1d4bee4..c8ee908 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/consumer/EmptyPointsRemindConsumer.java @@ -4,12 +4,15 @@ import com.mcwl.common.constant.QueueConstants; import com.mcwl.memberCenter.domain.UserMember; import com.mcwl.memberCenter.service.UserMemberService; import com.mcwl.memberCenter.task.UserMemberTask; +import com.rabbitmq.client.Channel; +import org.springframework.amqp.core.Message; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.io.IOException; import java.util.List; @@ -20,21 +23,37 @@ public class EmptyPointsRemindConsumer { private final UserMemberService userMemberService; - @RabbitListener(queues = QueueConstants.EMPTY_POINTS_REMIND_QUEUE) - public void emptyPointsRemind(List userMemberList) { - // TODO 发送短信提醒用户积分即将清零 - log.info("消费者获取到积分清零提醒的数据:{}", userMemberList); + @RabbitListener(queues = QueueConstants.EMPTY_POINTS_REMIND_QUEUE, ackMode = "MANUAL") + public void emptyPointsRemind(UserMember UserMember, Channel channel, Message message) { + try { + // TODO 发送短信提醒用户积分即将清零 + log.info("获取到积分清零提醒的数据:{}", UserMember); + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + } catch (Exception e) { + log.error("处理积分清零提醒消息时出错: {}", e.getMessage(), e); + try { + channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); + } catch (IOException ex) { + log.error("消息确认失败: {}", ex.getMessage(), ex); + } + } } - @RabbitListener(queues = QueueConstants.MEMBER_BILLING_QUEUE) - public void memberBillingQueue(UserMember userMember) { - // TODO 发送短信提醒用户会员账单,如果支付成功,更新last_payment_date,并重新计算end_date(start_date + 1个月) - log.info("消费者获取到会员账单的数据:{}", userMember); + @RabbitListener(queues = QueueConstants.MEMBER_BILLING_QUEUE, ackMode = "MANUAL") + public void memberBillingQueue(UserMember userMember, Channel channel, Message message) { + try { + // TODO 发送短信提醒用户会员账单,如果支付成功,更新last_payment_date,并重新计算end_date(start_date + 1个月) + log.info("获取到会员账单的数据:{}", userMember); + } catch (Exception e) { + log.error("处理会员账单消息时出错: {}", e.getMessage(), e); + try { + channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); + } catch (IOException ex) { + log.error("消息确认失败: {}", ex.getMessage(), ex); + } + } } - - - } diff --git a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java index 7f06d09..11cc3f4 100644 --- a/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java +++ b/mcwl-memberCenter/src/main/java/com/mcwl/memberCenter/task/UserMemberTask.java @@ -31,9 +31,13 @@ public class UserMemberTask { */ public void emptyPointsRemindTask() { List userMemberList = this.getUseUserMember(); - + if (userMemberList == null || userMemberList.isEmpty()) { + return; + } // 发送积分清零消息 - rabbitTemplate.convertAndSend(QueueConstants.EMPTY_POINTS_REMIND_QUEUE, userMemberList); + for (UserMember userMember : userMemberList) { + rabbitTemplate.convertAndSend(QueueConstants.EMPTY_POINTS_REMIND_QUEUE, userMember); + } } @@ -60,7 +64,8 @@ public class UserMemberTask { LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); // endDate大于当前时间, subscriptionStatus不为过期 qw.gt(UserMember::getEndDate, System.currentTimeMillis()) - .ne(UserMember::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_EXPIRED); + .ne(UserMember::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_EXPIRED) + .ne(UserMember::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_PENDING); List userMemberList = userMemberService.list(qw); if (userMemberList == null || userMemberList.isEmpty()) { return; @@ -97,14 +102,14 @@ public class UserMemberTask { // subscriptionStatus 不为 "过期" 或 "待支付" // status 为 0 的 LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); - qw.le(UserMember::getStartDate, System.currentTimeMillis()) - .ge(UserMember::getEndDate, System.currentTimeMillis()) + qw.le(UserMember::getStartDate, new Date()) + .ge(UserMember::getEndDate, new Date()) .ne(UserMember::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_EXPIRED) .ne(UserMember::getSubscriptionStatus, MemberMenu.MEMBER_CENTER_PENDING) .eq(UserMember::getStatus, "0"); // 对应的sql为 System.out.println("sql = " + qw.getSqlSegment()); - return userMemberService.list(); + return userMemberService.list(qw); }