mq设置超时时间30秒

This commit is contained in:
tianfeng 2026-01-07 19:20:50 +08:00
parent 63a44ddf0b
commit f075c8a87d
21 changed files with 51 additions and 47 deletions

View File

@ -2,9 +2,9 @@ package com.red.circle.mq.rocket.business.producer;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.mq.business.model.event.approval.ApprovalEvent;
import com.red.circle.mq.business.model.event.approval.CensorProfileEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.CensorProfileSink;
import com.red.circle.mq.rocket.business.streams.ConsoleApprovalSink;
import com.red.circle.tool.core.sequence.IdWorkerUtils;
@ -20,7 +20,7 @@ import org.springframework.stereotype.Component;
@RequiredArgsConstructor
public class CensorMqMessage {
private final SenderService senderService;
private final MessageSenderService senderService;
/**
* 图片内容鉴定.

View File

@ -2,8 +2,8 @@ package com.red.circle.mq.rocket.business.producer;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.mq.business.model.event.dynamic.DynamicEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.DynamicSink;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
@ -17,7 +17,7 @@ import org.springframework.stereotype.Component;
@RequiredArgsConstructor
public class DynamicMqMessage {
private final SenderService senderService;
private final MessageSenderService senderService;
/**
* 动态 - 业务处理.

View File

@ -7,6 +7,7 @@ import com.red.circle.mq.business.model.event.game.GameRedPacketEvent;
import com.red.circle.mq.business.model.event.game.GameRoomPkEvent;
import com.red.circle.mq.business.model.event.game.GameRoomVoteEvent;
import com.red.circle.mq.business.model.event.game.GameTurntableEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.GameBurstCrystalSink;
import com.red.circle.mq.rocket.business.streams.GameIndoorTeamPkSink;
import com.red.circle.mq.rocket.business.streams.GameRedPacketSink;
@ -15,7 +16,6 @@ import com.red.circle.mq.rocket.business.streams.GameRoomVoteSink;
import com.red.circle.mq.rocket.business.streams.GameTurntableAutoEndSink;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.tool.core.date.TimestampUtils;
import com.red.circle.tool.core.sequence.IdWorkerUtils;
import lombok.RequiredArgsConstructor;
@ -30,7 +30,7 @@ import org.springframework.stereotype.Component;
@RequiredArgsConstructor
public class GameMqMessage {
private final SenderService senderService;
private final MessageSenderService senderService;
/**
* 游戏转盘.

View File

@ -2,8 +2,8 @@ package com.red.circle.mq.rocket.business.producer;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.mq.business.model.event.pay.BuySuccessEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.BuySuccessSink;
import com.red.circle.tool.core.sequence.IdWorkerUtils;
import lombok.RequiredArgsConstructor;
@ -18,7 +18,7 @@ import org.springframework.stereotype.Component;
@RequiredArgsConstructor
public class OrderMqMessage {
private final SenderService senderService;
private final MessageSenderService senderService;
/**
* 内购-购买成功.

View File

@ -2,7 +2,6 @@ package com.red.circle.mq.rocket.business.producer;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.mq.business.model.event.room.LiveVoiceSessionEvent;
import com.red.circle.mq.business.model.event.room.RoomVoiceCreateSuccessEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;

View File

@ -2,14 +2,9 @@ package com.red.circle.mq.rocket.business.producer;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.mq.business.model.event.gift.GiveAwayGiftBatchEvent;
import com.red.circle.mq.business.model.event.gift.OfflineProcessGiftEvent;
import com.red.circle.mq.business.model.event.task.TaskApprovalEvent;
import com.red.circle.mq.rocket.business.streams.GiveGiftSink;
import com.red.circle.mq.rocket.business.streams.OfflineProcessGiftSink;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.TaskSink;
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
@ -24,7 +19,7 @@ import java.time.Instant;
@RequiredArgsConstructor
public class TaskMqMessage {
private final SenderService senderService;
private final MessageSenderService senderService;
/**

View File

@ -3,7 +3,6 @@ package com.red.circle.mq.rocket.business.producer;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.mq.business.model.event.team.TeamBillSettleEvent;
import com.red.circle.mq.business.model.event.team.TeamExchangeSurplusTargetEvent;
import com.red.circle.mq.business.model.event.team.TeamSalaryCountEvent;

View File

@ -2,7 +2,6 @@ package com.red.circle.mq.rocket.business.producer;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.mq.business.model.event.BadgeEvent;
import com.red.circle.mq.business.model.event.BadgeOperateEvent;
import com.red.circle.mq.business.model.event.GameKingRewardEvent;
@ -25,7 +24,6 @@ import com.red.circle.mq.rocket.business.streams.UserHeartbeatSink;
import com.red.circle.tool.core.sequence.IdWorkerUtils;
import java.sql.Timestamp;
import lombok.RequiredArgsConstructor;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Component;
/**
@ -35,8 +33,7 @@ import org.springframework.stereotype.Component;
@RequiredArgsConstructor
public class UserMqMessageService {
private final SenderService senderService;
private final MessageSenderService messageSenderService;
private final MessageSenderService senderService;
/**
* 登陆注册.
@ -120,7 +117,7 @@ public class UserMqMessageService {
* 发送用户心跳事件.
*/
public void sendUserHeartbeat(UserHeartbeatEvent event) {
messageSenderService.sendEventMessage(MessageEvent.builder()
senderService.sendEventMessage(MessageEvent.builder()
.consumeId(IdWorkerUtils.getIdStr())
.topic(FixedTopic.RC_DEFAULT_APP_ORDINARY)
.tag(UserHeartbeatSink.TAG)

View File

@ -2,7 +2,6 @@ package com.red.circle.mq.rocket.business.producer;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.mq.business.model.event.wallet.WalletReceiptSyncEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.WalletAssetGoldSyncSinkV2;
@ -19,7 +18,6 @@ import org.springframework.stereotype.Service;
@RequiredArgsConstructor
public class WalletMqMessageService {
private final SenderService senderService;
private final MessageSenderService messageSenderService;
/**

View File

@ -4,6 +4,8 @@ import com.red.circle.component.mq.props.RocketMQProperties;
import com.red.circle.component.mq.service.*;
import com.red.circle.tool.core.collection.CollectionUtils;
import com.red.circle.tool.core.text.StringUtils;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -14,8 +16,10 @@ import java.util.concurrent.ThreadPoolExecutor;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.apis.ClientConfiguration;
import org.apache.rocketmq.client.apis.ClientException;
import org.apache.rocketmq.client.apis.ClientServiceProvider;
import org.apache.rocketmq.client.apis.StaticSessionCredentialsProvider;
import org.apache.rocketmq.client.apis.message.Message;
import org.apache.rocketmq.client.apis.message.MessageBuilder;
import org.springframework.beans.factory.annotation.Qualifier;
@ -85,7 +89,7 @@ public class ManagedRocketMQProducer implements Producer {
ClientServiceProvider provider = ClientServiceProvider.loadService();
org.apache.rocketmq.client.apis.producer.Producer producer = provider
.newProducerBuilder()
.setClientConfiguration(rocketMQProperties.newClientConfiguration())
.setClientConfiguration(newClientConfiguration())
.setTopics(new String[]{topic})
.build();
producerMapping.put(topic, new RocketMQProducerMapping(provider, producer));
@ -95,12 +99,25 @@ public class ManagedRocketMQProducer implements Producer {
failedTopics.add(topic);
}
});
if (!failedTopics.isEmpty()) {
throw new RuntimeException("MQ Producer 初始化失败的 topic: " + failedTopics);
}
}
public ClientConfiguration newClientConfiguration() {
String var1 = rocketMQProperties.getAccessKey();
String var2 = rocketMQProperties.getSecretKey();
StaticSessionCredentialsProvider var3 = new StaticSessionCredentialsProvider(var1, var2);
String var4 = rocketMQProperties.getEndpoints();
return ClientConfiguration.newBuilder()
.setEndpoints(var4)
.setCredentialProvider(var3)
.setRequestTimeout(Duration.ofSeconds(30L))
.build();
}
public String send(ProducerMessage message) {
org.apache.rocketmq.client.apis.producer.Producer producer =
getRocketMQProducerMapping(message.getTopic()).getProducer();

View File

@ -5,9 +5,9 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.google.common.collect.Lists;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.mq.business.model.event.game.GameLuckyBoxBusinessEvent;
import com.red.circle.mq.business.model.event.game.GameLuckyBoxCountUser;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.GameLuckyBoxBusinessSink;
import com.red.circle.other.app.convertor.game.GameLuckyBoxConvertor;
import com.red.circle.other.app.dto.clientobject.game.GameLuckyBoxAwardCO;
@ -80,7 +80,7 @@ import org.springframework.stereotype.Component;
public class GameLuckyBoxCommon {
private static final Random random = new Random();
private final SenderService senderService;
private final MessageSenderService senderService;
private final GiftCacheService giftCacheService;
private final GiftConfigService giftConfigService;
private final GiftBackpackService giftBackpackService;

View File

@ -11,7 +11,6 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.external.inner.endpoint.message.ImGroupClient;
import com.red.circle.external.inner.model.cmd.message.BroadcastGroupMsgBodyCmd;
import com.red.circle.external.inner.model.cmd.message.CustomGroupMsgBodyCmd;

View File

@ -5,10 +5,10 @@ import com.red.circle.common.business.core.enums.ApprovalStatusEnum;
import com.red.circle.common.business.core.enums.DataApprovalTypeEnum;
import com.red.circle.common.business.core.enums.OpUserType;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.framework.core.asserts.ResponseAssert;
import com.red.circle.mq.business.model.event.approval.ApprovalContentEvent;
import com.red.circle.mq.business.model.event.approval.ApprovalDynamicEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.ConsoleApprovalSink;
import com.red.circle.other.app.command.room.LiveVoicePublicRoomCreateCmdExe;
import com.red.circle.other.app.command.room.LiveVoiceRoomCreateCmdExe;
@ -55,7 +55,7 @@ import java.util.*;
public class UserProfileApproveServiceImpl implements UserProfileApproveService {
private static final Logger log = LoggerFactory.getLogger(UserProfileApproveServiceImpl.class);
private final SenderService senderService;
private final MessageSenderService senderService;
private final UserRegionGateway userRegionGateway;
private final UserProfileService userProfileService;
private final UserProfileGateway userProfileGateway;

View File

@ -4,12 +4,12 @@ import com.google.common.collect.Lists;
import com.red.circle.common.business.enums.OperationUserOrigin;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.component.redis.service.RedisService;
import com.red.circle.framework.core.asserts.ResponseAssert;
import com.red.circle.mq.business.model.event.BadgeOperateEvent;
import com.red.circle.mq.business.model.event.team.TeamSalaryCountEvent;
import com.red.circle.mq.rocket.business.producer.UserMqMessageService;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.TeamSalaryCountSink;
import com.red.circle.other.infra.database.mongo.entity.team.team.TeamApplicationProcess;
import com.red.circle.other.infra.database.mongo.entity.team.team.TeamApplicationProcessApproval;
@ -62,7 +62,7 @@ import org.springframework.stereotype.Component;
public class TeamMemberRemoveDecay {
private final RedisService redisService;
private final SenderService senderService;
private final MessageSenderService senderService;
private final WalletGoldClient walletGoldClient;
private final TeamMemberService teamMemberService;
private final TeamProfileService teamProfileService;

View File

@ -3,13 +3,13 @@ package com.red.circle.other.infra.common.team.decay;
import com.red.circle.common.business.enums.OperationUserOrigin;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.component.redis.service.RedisService;
import com.red.circle.framework.core.asserts.ResponseAssert;
import com.red.circle.framework.core.response.CommonErrorCode;
import com.red.circle.mq.business.model.event.BadgeOperateEvent;
import com.red.circle.mq.business.model.event.team.TeamSalaryCountEvent;
import com.red.circle.mq.rocket.business.producer.UserMqMessageService;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.TeamSalaryCountSink;
import com.red.circle.other.infra.convertor.team.TeamInfraConvertor;
import com.red.circle.other.infra.database.mongo.entity.team.team.TeamApplicationProcessApproval;
@ -60,7 +60,7 @@ import org.springframework.stereotype.Component;
public class UpdateMemberTeamDecay {
private final RedisService redisService;
private final SenderService senderService;
private final MessageSenderService senderService;
private final TeamMemberService teamMemberService;
private final UserMqMessageService userMqMessageService;
private final TeamInfraConvertor teamInfraConvertor;

View File

@ -3,9 +3,9 @@ package com.red.circle.other.app.inner.service.approval.impl;
import com.red.circle.common.business.core.enums.ApprovalStatusEnum;
import com.red.circle.common.business.core.enums.DataApprovalTypeEnum;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.mq.business.model.event.approval.ApprovalContentEvent;
import com.red.circle.mq.business.model.event.approval.ApprovalDynamicEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.ConsoleApprovalSink;
import com.red.circle.other.app.inner.service.approval.ApprovalDataInfoClientService;
import com.red.circle.other.infra.database.rds.service.approval.ApprovalUserSettingDataService;
@ -29,7 +29,7 @@ import org.springframework.stereotype.Service;
@RequiredArgsConstructor
public class ApprovalDataInfoClientServiceImpl implements ApprovalDataInfoClientService {
private final SenderService senderService;
private final MessageSenderService senderService;
private final ApprovalUserSettingDataService approvalUserSettingDataService;
@Override

View File

@ -4,12 +4,12 @@ import com.red.circle.common.business.core.enums.ApprovalStatusEnum;
import com.red.circle.common.business.core.enums.DataApprovalTypeEnum;
import com.red.circle.common.business.enums.DynamicMessageEnum;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.framework.core.asserts.ResponseAssert;
import com.red.circle.framework.core.response.CommonErrorCode;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.mq.business.model.event.approval.ApprovalContentEvent;
import com.red.circle.mq.business.model.event.approval.ApprovalDynamicEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.ConsoleApprovalSink;
import com.red.circle.other.app.inner.convertor.approval.ApprovalDynamicConvertor;
import com.red.circle.other.app.inner.convertor.dynamic.DynamicInnerConvertor;
@ -43,7 +43,7 @@ import org.springframework.stereotype.Service;
@RequiredArgsConstructor
public class ApprovalDynamicClientServiceImpl implements ApprovalDynamicClientService {
private final SenderService senderService;
private final MessageSenderService senderService;
private final DynamicContentService dynamicContentService;
private final DynamicPictureService dynamicPictureService;
private final DynamicInnerConvertor dynamicInnerConvertor;

View File

@ -4,7 +4,6 @@ import com.red.circle.common.business.core.enums.ApprovalStatusEnum;
import com.red.circle.common.business.core.enums.DataApprovalTypeEnum;
import com.red.circle.common.business.enums.DynamicMessageEnum;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.external.inner.endpoint.message.NewsletterClient;
import com.red.circle.external.inner.model.cmd.message.NewsletterResultCmd;
import com.red.circle.external.inner.model.enums.message.NewsletterEvent;
@ -13,6 +12,7 @@ import com.red.circle.framework.core.response.CommonErrorCode;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.mq.business.model.event.approval.ApprovalContentEvent;
import com.red.circle.mq.business.model.event.approval.ApprovalDynamicEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.ConsoleApprovalSink;
import com.red.circle.other.app.inner.convertor.approval.ApprovalDynamicReportConvertor;
import com.red.circle.other.app.inner.convertor.dynamic.DynamicInnerConvertor;
@ -47,7 +47,7 @@ import org.springframework.stereotype.Service;
@RequiredArgsConstructor
public class ApprovalDynamicReportClientServiceImpl implements ApprovalDynamicReportClientService {
private final SenderService senderService;
private final MessageSenderService senderService;
private final NewsletterClient newsletterClient;
private final DynamicReportService dynamicReportService;
private final DynamicPopularService dynamicPopularService;

View File

@ -4,9 +4,9 @@ import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.framework.core.asserts.ResponseAssert;
import com.red.circle.mq.business.model.event.team.TeamSalaryCountEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.TeamSalaryCountSink;
import com.red.circle.other.app.inner.convertor.user.UserProfileInnerConvertor;
import com.red.circle.other.app.inner.service.team.TeamBillCycleClientService;
@ -83,7 +83,7 @@ import org.springframework.stereotype.Service;
public class TeamBillCycleClientServiceImpl implements TeamBillCycleClientService {
private static final Logger log = LoggerFactory.getLogger(TeamBillCycleClientServiceImpl.class);
private final SenderService senderService;
private final MessageSenderService senderService;
private final TeamMemberService teamMemberService;
private final UserProfileGateway userProfileGateway;
private final TeamInfraConvertor teamInfraConvertor;

View File

@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.red.circle.common.business.enums.OperationUserOrigin;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.FixedTopic;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.component.redis.service.RedisService;
import com.red.circle.framework.core.asserts.ResponseAssert;
import com.red.circle.framework.core.response.CommonErrorCode;
@ -14,6 +13,7 @@ import com.red.circle.framework.dto.PageResult;
import com.red.circle.mq.business.model.event.BadgeOperateEvent;
import com.red.circle.mq.business.model.event.team.TeamSalaryCountEvent;
import com.red.circle.mq.rocket.business.producer.UserMqMessageService;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.TeamSalaryCountSink;
import com.red.circle.other.app.inner.service.team.TeamProfileClientService;
import com.red.circle.other.domain.gateway.user.UserProfileGateway;
@ -97,7 +97,7 @@ import org.springframework.stereotype.Service;
public class TeamProfileClientServiceImpl implements TeamProfileClientService {
private final RedisService redisService;
private final SenderService senderService;
private final MessageSenderService senderService;
private final TeamNoticeService teamNoticeService;
private final TeamMemberService teamMemberService;
private final UserProfileGateway userProfileGateway;

View File

@ -4,9 +4,9 @@ import com.red.circle.common.business.core.enums.ApprovalStatusEnum;
import com.red.circle.common.business.core.enums.DataApprovalTypeEnum;
import com.red.circle.common.business.enums.ViolationEnum;
import com.red.circle.component.mq.MessageEvent;
import com.red.circle.component.mq.service.SenderService;
import com.red.circle.mq.business.model.event.approval.ApprovalContentEvent;
import com.red.circle.mq.business.model.event.approval.ApprovalDynamicEvent;
import com.red.circle.mq.rocket.business.service.MessageSenderService;
import com.red.circle.mq.rocket.business.streams.ConsoleApprovalSink;
import com.red.circle.other.app.inner.service.user.user.ApprovalPhotoWallClientService;
import com.red.circle.other.infra.database.rds.service.approval.ApprovalUserSettingDataService;
@ -31,7 +31,7 @@ import org.springframework.stereotype.Service;
@RequiredArgsConstructor
public class ApprovalPhotoWallClientServiceImpl implements ApprovalPhotoWallClientService {
private final SenderService senderService;
private final MessageSenderService senderService;
private final UserPhotoWallService userPhotoWallService;
private final ApprovalUserSettingDataService approvalUserSettingDataService;