From 37cd61768702466bfe5d4f093afa68ad1e20aaaa Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Wed, 24 Dec 2025 10:42:15 +0800 Subject: [PATCH] =?UTF-8?q?mq=20repeatConsumeTag=20=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/listener/BuySuccessListener.java | 19 ++++++++++++++++++- .../app/listener/BadgeCheckListener.java | 9 +++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/listener/BuySuccessListener.java b/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/listener/BuySuccessListener.java index f7f039d2..94ef599d 100644 --- a/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/listener/BuySuccessListener.java +++ b/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/listener/BuySuccessListener.java @@ -1,5 +1,6 @@ package com.red.circle.order.app.listener; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.red.circle.common.business.core.enums.ReceiptType; import com.red.circle.common.business.core.enums.SysOriginPlatformEnum; @@ -71,7 +72,7 @@ public class BuySuccessListener implements MessageListener { .logTag("语音房会话") .consumeMsgTimeoutMinute(15) .repeatConsumeMinute(15) - .repeatConsumeTag("BuySuccess") + .repeatConsumeTag(extractOrderNo(message)) .checkConsumeTag(BuySuccessSink.TAG) .message(message) .build(), @@ -79,6 +80,22 @@ public class BuySuccessListener implements MessageListener { this::execute); } + /** + * 提取订单号作为幂等键 + */ + private String extractOrderNo(ConsumerMessage message) { + try { + BuySuccessEvent event = JSON.parseObject( + message.getBody(), + BuySuccessEvent.class + ); + return "BUY_SUCCESS_" + event.getPurchaseHistoryId(); + } catch (Exception e) { + log.warn("解析订单号失败,使用消息ID作为幂等键", e); + return "BUY_SUCCESS_" + message.getMessageId(); + } + } + private void execute(BuySuccessEvent eventBody) { if (!ArithmeticUtils.gt(eventBody.getCandyQuantity(), BigDecimal.ZERO) || Objects.equals(eventBody.getTrialPeriod(), Boolean.TRUE)) { diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/BadgeCheckListener.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/BadgeCheckListener.java index c13e105f..c5d65dec 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/BadgeCheckListener.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/BadgeCheckListener.java @@ -31,15 +31,16 @@ public class BadgeCheckListener implements MessageListener { return messageEventProcess.consume( MessageEventProcessDescribe.builder() .logTag("徽章检测处理") - .consumeMsgTimeoutMinute(60) + .consumeMsgTimeoutMinute(5) .repeatConsumeMinute(1) - .repeatConsumeTag("LiveVoiceSession") + .repeatConsumeTag("BADGE_CHECK_" + message.getMessageId()) .checkConsumeTag(BadgeCheckSink.TAG) .message(message) .build(), BadgeEvent.class, - eventBody -> badgeCommon.checkActivateBadgePermanent(eventBody.getUserId(), - BadgeKeyEnum.valueOf(eventBody.getBadgeKey()))); + eventBody -> { +// badgeCommon.checkActivateBadgePermanent(eventBody.getUserId(),BadgeKeyEnum.valueOf(eventBody.getBadgeKey())); + }); }