mq repeatConsumeTag 问题处理

This commit is contained in:
tianfeng 2025-12-24 10:42:15 +08:00
parent d1a4522d18
commit 37cd617687
2 changed files with 23 additions and 5 deletions

View File

@ -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)) {

View File

@ -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()));
});
}