Send task center events through MQ

This commit is contained in:
ZuoZuo 2026-05-10 02:05:22 +08:00
parent 5d98ed071c
commit 354f11150f
8 changed files with 196 additions and 0 deletions

View File

@ -7,4 +7,9 @@ task:
base-url: ${TASK_CENTER_GO_URL:${LIKEI_GATEWAY_ROUTE_GO_URI:http://golang:2900}}
internal-token: ${GAME_INTERNAL_CALLBACK_SECRET:}
timeout-millis: ${TASK_CENTER_GO_TIMEOUT_MILLIS:3000}
event:
mq:
enabled: ${TASK_CENTER_EVENT_MQ_ENABLED:false}
topic: ${TASK_CENTER_EVENT_MQ_TOPIC:RC_DEFAULT_APP_ORDINARY}
tag: ${TASK_CENTER_EVENT_MQ_TAG:task_center_event}

View File

@ -79,3 +79,8 @@ task:
base-url: ${TASK_CENTER_GO_URL:${LIKEI_GATEWAY_ROUTE_GO_URI:http://golang:2900}}
internal-token: ${GAME_INTERNAL_CALLBACK_SECRET:}
timeout-millis: ${TASK_CENTER_GO_TIMEOUT_MILLIS:3000}
event:
mq:
enabled: ${TASK_CENTER_EVENT_MQ_ENABLED:false}
topic: ${TASK_CENTER_EVENT_MQ_TOPIC:RC_DEFAULT_APP_ORDINARY}
tag: ${TASK_CENTER_EVENT_MQ_TAG:task_center_event}

View File

@ -122,6 +122,11 @@ task:
base-url: ${TASK_CENTER_GO_URL:${LIKEI_GATEWAY_ROUTE_GO_URI:http://golang:2900}}
internal-token: ${GAME_INTERNAL_CALLBACK_SECRET:}
timeout-millis: ${TASK_CENTER_GO_TIMEOUT_MILLIS:3000}
event:
mq:
enabled: ${TASK_CENTER_EVENT_MQ_ENABLED:false}
topic: ${TASK_CENTER_EVENT_MQ_TOPIC:RC_DEFAULT_APP_ORDINARY}
tag: ${TASK_CENTER_EVENT_MQ_TAG:task_center_event}
voice-room:
region-broadcast:

View File

@ -18,3 +18,8 @@ task:
base-url: ${TASK_CENTER_GO_URL:${LIKEI_GATEWAY_ROUTE_GO_URI:http://golang:2900}}
internal-token: ${GAME_INTERNAL_CALLBACK_SECRET:}
timeout-millis: ${TASK_CENTER_GO_TIMEOUT_MILLIS:3000}
event:
mq:
enabled: ${TASK_CENTER_EVENT_MQ_ENABLED:false}
topic: ${TASK_CENTER_EVENT_MQ_TOPIC:RC_DEFAULT_APP_ORDINARY}
tag: ${TASK_CENTER_EVENT_MQ_TAG:task_center_event}

View File

@ -1,7 +1,9 @@
package com.red.circle.live.infra.client;
import com.alibaba.fastjson.JSON;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.live.domain.constant.ActiveSecondConstant;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
@ -14,6 +16,7 @@ import java.util.Objects;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@ -23,6 +26,8 @@ public class TaskCenterGoClient {
private static final String EVENT_TYPE_MIC_DURATION_SECONDS = "MIC_DURATION_SECONDS";
private final ObjectProvider<MessageSenderService> messageSenderServiceProvider;
@Value("${task.center.go.enabled:true}")
private boolean enabled;
@ -35,6 +40,19 @@ public class TaskCenterGoClient {
@Value("${task.center.go.timeout-millis:3000}")
private Integer timeoutMillis;
@Value("${task.center.event.mq.enabled:false}")
private boolean mqEnabled;
@Value("${task.center.event.mq.topic:RC_DEFAULT_APP_ORDINARY}")
private String mqTopic;
@Value("${task.center.event.mq.tag:task_center_event}")
private String mqTag;
public TaskCenterGoClient(ObjectProvider<MessageSenderService> messageSenderServiceProvider) {
this.messageSenderServiceProvider = messageSenderServiceProvider;
}
public void reportMicDuration(String sysOrigin,
Long roomId,
Integer micIndex,
@ -81,6 +99,9 @@ public class TaskCenterGoClient {
}
private void reportEvent(TaskCenterEventRequest request) {
if (mqEnabled) {
publishMqEvent(request);
}
if (!enabled) {
return;
}
@ -134,6 +155,24 @@ public class TaskCenterGoClient {
}
}
private void publishMqEvent(TaskCenterEventRequest request) {
try {
MessageSenderService senderService = messageSenderServiceProvider.getIfAvailable();
if (Objects.isNull(senderService)) {
log.warn("Task center mq sender missing, skip event report. eventId={}", request.getEventId());
return;
}
senderService.sendEventMessage(MessageEvent.builder()
.consumeId(request.getEventId())
.topicString(defaultIfBlank(mqTopic, "RC_DEFAULT_APP_ORDINARY"))
.tag(defaultIfBlank(mqTag, "task_center_event"))
.body(request)
.build());
} catch (Exception e) {
log.warn("Task center mq report error. eventId={}", request.getEventId(), e);
}
}
private String readResponse(HttpURLConnection connection) {
try (InputStream inputStream = connection.getErrorStream() != null
? connection.getErrorStream()
@ -166,6 +205,11 @@ public class TaskCenterGoClient {
return value;
}
private String defaultIfBlank(String value, String fallback) {
String normalized = Objects.toString(value, "").trim();
return normalized.isEmpty() ? fallback : normalized;
}
@Data
@Accessors(chain = true)
private static class TaskCenterEventRequest {

View File

@ -1,6 +1,8 @@
package com.red.circle.order.app.common.task;
import com.alibaba.fastjson.JSON;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
@ -15,6 +17,7 @@ import java.util.Objects;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@ -24,6 +27,8 @@ public class TaskCenterGoClient {
private static final String EVENT_TYPE_RECHARGE_GOLD = "RECHARGE_GOLD";
private final ObjectProvider<MessageSenderService> messageSenderServiceProvider;
@Value("${task.center.go.enabled:true}")
private boolean enabled;
@ -36,6 +41,19 @@ public class TaskCenterGoClient {
@Value("${task.center.go.timeout-millis:3000}")
private Integer timeoutMillis;
@Value("${task.center.event.mq.enabled:false}")
private boolean mqEnabled;
@Value("${task.center.event.mq.topic:RC_DEFAULT_APP_ORDINARY}")
private String mqTopic;
@Value("${task.center.event.mq.tag:task_center_event}")
private String mqTag;
public TaskCenterGoClient(ObjectProvider<MessageSenderService> messageSenderServiceProvider) {
this.messageSenderServiceProvider = messageSenderServiceProvider;
}
public void reportRechargeGold(String sysOrigin,
Long userId,
Long purchaseHistoryId,
@ -68,6 +86,9 @@ public class TaskCenterGoClient {
}
private void reportEvent(TaskCenterEventRequest request) {
if (mqEnabled) {
publishMqEvent(request);
}
if (!enabled) {
return;
}
@ -109,6 +130,24 @@ public class TaskCenterGoClient {
}
}
private void publishMqEvent(TaskCenterEventRequest request) {
try {
MessageSenderService senderService = messageSenderServiceProvider.getIfAvailable();
if (Objects.isNull(senderService)) {
log.warn("Task center mq sender missing, skip event report. eventId={}", request.getEventId());
return;
}
senderService.sendEventMessage(MessageEvent.builder()
.consumeId(request.getEventId())
.topicString(defaultIfBlank(mqTopic, "RC_DEFAULT_APP_ORDINARY"))
.tag(defaultIfBlank(mqTag, "task_center_event"))
.body(request)
.build());
} catch (Exception e) {
log.warn("Task center mq report error. eventId={}", request.getEventId(), e);
}
}
private String readResponse(HttpURLConnection connection) {
try (InputStream inputStream = connection.getErrorStream() != null
? connection.getErrorStream()
@ -129,6 +168,11 @@ public class TaskCenterGoClient {
return value;
}
private String defaultIfBlank(String value, String fallback) {
String normalized = Objects.toString(value, "").trim();
return normalized.isEmpty() ? fallback : normalized;
}
@Data
@Accessors(chain = true)
private static class TaskCenterEventRequest {

View File

@ -3,6 +3,8 @@ package com.red.circle.other.app.common.task;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.HashMap;
@ -11,6 +13,7 @@ import java.util.Objects;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@ -21,6 +24,8 @@ public class TaskCenterGoClient {
private static final String EVENT_TYPE_GAME_CONSUME_GOLD = "GAME_CONSUME_GOLD";
private static final String EVENT_TYPE_GIFT_CONSUME_GOLD = "GIFT_CONSUME_GOLD";
private final ObjectProvider<MessageSenderService> messageSenderServiceProvider;
@Value("${task.center.go.enabled:true}")
private boolean enabled;
@ -33,6 +38,19 @@ public class TaskCenterGoClient {
@Value("${task.center.go.timeout-millis:3000}")
private Integer timeoutMillis;
@Value("${task.center.event.mq.enabled:false}")
private boolean mqEnabled;
@Value("${task.center.event.mq.topic:RC_DEFAULT_APP_ORDINARY}")
private String mqTopic;
@Value("${task.center.event.mq.tag:task_center_event}")
private String mqTag;
public TaskCenterGoClient(ObjectProvider<MessageSenderService> messageSenderServiceProvider) {
this.messageSenderServiceProvider = messageSenderServiceProvider;
}
public void reportGameConsumeGold(String sysOrigin,
Long userId,
String provider,
@ -101,6 +119,9 @@ public class TaskCenterGoClient {
}
private void reportEvent(TaskCenterEventRequest request) {
if (mqEnabled) {
publishMqEvent(request);
}
if (!enabled) {
return;
}
@ -127,6 +148,24 @@ public class TaskCenterGoClient {
}
}
private void publishMqEvent(TaskCenterEventRequest request) {
try {
MessageSenderService senderService = messageSenderServiceProvider.getIfAvailable();
if (Objects.isNull(senderService)) {
log.warn("Task center mq sender missing, skip event report. eventId={}", request.getEventId());
return;
}
senderService.sendEventMessage(MessageEvent.builder()
.consumeId(request.getEventId())
.topicString(defaultIfBlank(mqTopic, "RC_DEFAULT_APP_ORDINARY"))
.tag(defaultIfBlank(mqTag, "task_center_event"))
.body(request)
.build());
} catch (Exception e) {
log.warn("Task center mq report error. eventId={}", request.getEventId(), e);
}
}
private String trimRightSlash(String value) {
while (value.endsWith("/")) {
value = value.substring(0, value.length() - 1);
@ -134,6 +173,11 @@ public class TaskCenterGoClient {
return value;
}
private String defaultIfBlank(String value, String fallback) {
String normalized = Objects.toString(value, "").trim();
return normalized.isEmpty() ? fallback : normalized;
}
@Data
@Accessors(chain = true)
private static class TaskCenterEventRequest {

View File

@ -1,6 +1,8 @@
package com.red.circle.wallet.app.common.task;
import com.alibaba.fastjson.JSON;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
@ -15,6 +17,7 @@ import java.util.Objects;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@ -24,6 +27,8 @@ public class TaskCenterGoClient {
private static final String EVENT_TYPE_RECHARGE_GOLD = "RECHARGE_GOLD";
private final ObjectProvider<MessageSenderService> messageSenderServiceProvider;
@Value("${task.center.go.enabled:true}")
private boolean enabled;
@ -36,6 +41,19 @@ public class TaskCenterGoClient {
@Value("${task.center.go.timeout-millis:3000}")
private Integer timeoutMillis;
@Value("${task.center.event.mq.enabled:false}")
private boolean mqEnabled;
@Value("${task.center.event.mq.topic:RC_DEFAULT_APP_ORDINARY}")
private String mqTopic;
@Value("${task.center.event.mq.tag:task_center_event}")
private String mqTag;
public TaskCenterGoClient(ObjectProvider<MessageSenderService> messageSenderServiceProvider) {
this.messageSenderServiceProvider = messageSenderServiceProvider;
}
public void reportShippingAgentRechargeGold(String sysOrigin,
Long userId,
Long runningWaterId,
@ -99,6 +117,9 @@ public class TaskCenterGoClient {
}
private void reportEvent(TaskCenterEventRequest request) {
if (mqEnabled) {
publishMqEvent(request);
}
if (!enabled) {
return;
}
@ -140,6 +161,24 @@ public class TaskCenterGoClient {
}
}
private void publishMqEvent(TaskCenterEventRequest request) {
try {
MessageSenderService senderService = messageSenderServiceProvider.getIfAvailable();
if (Objects.isNull(senderService)) {
log.warn("Task center mq sender missing, skip event report. eventId={}", request.getEventId());
return;
}
senderService.sendEventMessage(MessageEvent.builder()
.consumeId(request.getEventId())
.topicString(defaultIfBlank(mqTopic, "RC_DEFAULT_APP_ORDINARY"))
.tag(defaultIfBlank(mqTag, "task_center_event"))
.body(request)
.build());
} catch (Exception e) {
log.warn("Task center mq report error. eventId={}", request.getEventId(), e);
}
}
private String readResponse(HttpURLConnection connection) {
try (InputStream inputStream = connection.getErrorStream() != null
? connection.getErrorStream()
@ -160,6 +199,11 @@ public class TaskCenterGoClient {
return value;
}
private String defaultIfBlank(String value, String fallback) {
String normalized = Objects.toString(value, "").trim();
return normalized.isEmpty() ? fallback : normalized;
}
@Data
@Accessors(chain = true)
private static class TaskCenterEventRequest {