From 8fa8efc051f39fe37300e34a16abd24e74a833ab Mon Sep 17 00:00:00 2001
From: xsx <825657193@qq.com>
Date: Tue, 16 Jul 2024 21:18:11 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B0=86redis=E5=B0=81=E8=A3=85?=
=?UTF-8?q?=E6=88=90MQ?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../resources/db/db.sql => db/im-platfrom.sql | 5 +-
im-client/pom.xml | 5 -
.../main/java/com/bx/imclient/IMClient.java | 2 +
.../com/bx/imclient/config/RedisConfig.java | 31 -----
.../java/com/bx/imclient/sender/IMSender.java | 28 ++---
.../task/AbstractMessageResultTask.java | 15 +--
.../task/GroupMessageResultResultTask.java | 15 ++-
.../task/PrivateMessageResultResultTask.java | 15 ++-
im-commom/pom.xml | 5 +
.../com/bx/imcommon/mq/RedisMQConfig.java | 33 ++++++
.../com/bx/imcommon/mq/RedisMQConsumer.java | 13 +++
.../com/bx/imcommon/mq/RedisMQListener.java | 29 +++++
.../com/bx/imcommon/mq/RedisMQPullTask.java | 109 ++++++++++++++++++
.../com/bx/imcommon/mq/RedisMQTemplate.java | 42 +++++++
.../util/ThreadPoolExecutorFactory.java | 29 +----
.../java/com/bx/implatform/IMPlatformApp.java | 13 +--
.../com/bx/implatform/contant/Constant.java | 13 ++-
.../com/bx/implatform/contant/RedisKey.java | 31 +++--
.../com/bx/implatform/dto/GroupBanDTO.java | 21 ++++
.../com/bx/implatform/dto/GroupUnbanDTO.java | 19 +++
.../com/bx/implatform/dto/UserBanDTO.java | 22 ++++
.../com/bx/implatform/enums/MessageType.java | 59 ++--------
.../task/UserBannedConsumerTask.java | 50 ++++++++
.../task/AbstractPullMessageTask.java | 12 +-
24 files changed, 430 insertions(+), 186 deletions(-)
rename im-platform/src/main/resources/db/db.sql => db/im-platfrom.sql (94%)
delete mode 100644 im-client/src/main/java/com/bx/imclient/config/RedisConfig.java
create mode 100644 im-commom/src/main/java/com/bx/imcommon/mq/RedisMQConfig.java
create mode 100644 im-commom/src/main/java/com/bx/imcommon/mq/RedisMQConsumer.java
create mode 100644 im-commom/src/main/java/com/bx/imcommon/mq/RedisMQListener.java
create mode 100644 im-commom/src/main/java/com/bx/imcommon/mq/RedisMQPullTask.java
create mode 100644 im-commom/src/main/java/com/bx/imcommon/mq/RedisMQTemplate.java
create mode 100644 im-platform/src/main/java/com/bx/implatform/dto/GroupBanDTO.java
create mode 100644 im-platform/src/main/java/com/bx/implatform/dto/GroupUnbanDTO.java
create mode 100644 im-platform/src/main/java/com/bx/implatform/dto/UserBanDTO.java
create mode 100644 im-platform/src/main/java/com/bx/implatform/task/UserBannedConsumerTask.java
diff --git a/im-platform/src/main/resources/db/db.sql b/db/im-platfrom.sql
similarity index 94%
rename from im-platform/src/main/resources/db/db.sql
rename to db/im-platfrom.sql
index 1ea4b86..a5b44a9 100644
--- a/im-platform/src/main/resources/db/db.sql
+++ b/db/im-platfrom.sql
@@ -7,6 +7,8 @@ create table `im_user`(
`head_image_thumb` varchar(255) default '' comment '用户头像缩略图',
`password` varchar(255) not null comment '密码(明文)',
`sex` tinyint(1) default 0 comment '性别 0:男 1:女',
+ `is_banned` tinyint(1) default 0 comment '是否被封禁 0:否 1:是',
+ `reason` varchar(255) comment '被封禁原因',
`type` smallint default 1 comment '用户类型 1:普通用户 2:审核账户',
`signature` varchar(1024) default '' comment '个性签名',
`last_login_time` datetime DEFAULT null comment '最后登录时间',
@@ -45,7 +47,8 @@ create table `im_group`(
`head_image` varchar(255) default '' comment '群头像',
`head_image_thumb` varchar(255) default '' comment '群头像缩略图',
`notice` varchar(1024) default '' comment '群公告',
- `remark` varchar(255) default '' comment '群备注',
+ `is_banned` tinyint(1) default 0 comment '是否被封禁 0:否 1:是',
+ `reason` varchar(255) comment '被封禁原因',
`deleted` tinyint(1) default 0 comment '是否已删除',
`created_time` datetime default CURRENT_TIMESTAMP comment '创建时间'
)ENGINE=InnoDB CHARSET=utf8mb3 comment '群';
diff --git a/im-client/pom.xml b/im-client/pom.xml
index 320a3cb..774bafb 100644
--- a/im-client/pom.xml
+++ b/im-client/pom.xml
@@ -17,10 +17,5 @@
im-commom
2.0.0
-
-
- org.springframework.boot
- spring-boot-starter-data-redis
-
\ No newline at end of file
diff --git a/im-client/src/main/java/com/bx/imclient/IMClient.java b/im-client/src/main/java/com/bx/imclient/IMClient.java
index e94f0b8..7a476b1 100644
--- a/im-client/src/main/java/com/bx/imclient/IMClient.java
+++ b/im-client/src/main/java/com/bx/imclient/IMClient.java
@@ -65,4 +65,6 @@ public class IMClient {
}
+
+
}
diff --git a/im-client/src/main/java/com/bx/imclient/config/RedisConfig.java b/im-client/src/main/java/com/bx/imclient/config/RedisConfig.java
deleted file mode 100644
index 5ef996c..0000000
--- a/im-client/src/main/java/com/bx/imclient/config/RedisConfig.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.bx.imclient.config;
-
-import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
-
-@Configuration("IMRedisConfig")
-public class RedisConfig {
-
- @Bean("IMRedisTemplate")
- public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
- RedisTemplate redisTemplate = new RedisTemplate();
- redisTemplate.setConnectionFactory(redisConnectionFactory);
- // 设置值(value)的序列化采用FastJsonRedisSerializer
- redisTemplate.setValueSerializer(fastJsonRedisSerializer());
- redisTemplate.setHashValueSerializer(fastJsonRedisSerializer());
- // 设置键(key)的序列化采用StringRedisSerializer。
- redisTemplate.setKeySerializer(new StringRedisSerializer());
- redisTemplate.setHashKeySerializer(new StringRedisSerializer());
- redisTemplate.afterPropertiesSet();
- return redisTemplate;
- }
-
- public FastJsonRedisSerializer fastJsonRedisSerializer(){
- return new FastJsonRedisSerializer<>(Object.class);
- }
-
-}
diff --git a/im-client/src/main/java/com/bx/imclient/sender/IMSender.java b/im-client/src/main/java/com/bx/imclient/sender/IMSender.java
index 1e0a7f6..2a4fb88 100644
--- a/im-client/src/main/java/com/bx/imclient/sender/IMSender.java
+++ b/im-client/src/main/java/com/bx/imclient/sender/IMSender.java
@@ -8,20 +8,20 @@ import com.bx.imcommon.enums.IMListenerType;
import com.bx.imcommon.enums.IMSendCode;
import com.bx.imcommon.enums.IMTerminalType;
import com.bx.imcommon.model.*;
+import com.bx.imcommon.mq.RedisMQTemplate;
import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
import java.util.*;
@Service
@RequiredArgsConstructor
public class IMSender {
- @Resource(name="IMRedisTemplate")
- private RedisTemplate redisTemplate;
+ @Autowired
+ private RedisMQTemplate redisMQTemplate;
@Value("${spring.application.name}")
private String appName;
@@ -34,7 +34,7 @@ public class IMSender {
for (Integer terminal : message.getRecvTerminals()) {
// 获取对方连接的channelId
String key = String.join(":", IMRedisKey.IM_USER_SERVER_ID, message.getRecvId().toString(), terminal.toString());
- Integer serverId = (Integer)redisTemplate.opsForValue().get(key);
+ Integer serverId = (Integer)redisMQTemplate.opsForValue().get(key);
// 如果对方在线,将数据存储至redis,等待拉取推送
if (serverId != null) {
String sendKey = String.join(":", IMRedisKey.IM_MESSAGE_PRIVATE_QUEUE, serverId.toString());
@@ -45,7 +45,7 @@ public class IMSender {
recvInfo.setSender(message.getSender());
recvInfo.setReceivers(Collections.singletonList(new IMUserInfo(message.getRecvId(), terminal)));
recvInfo.setData(message.getData());
- redisTemplate.opsForList().rightPush(sendKey, recvInfo);
+ redisMQTemplate.opsForList().rightPush(sendKey, recvInfo);
} else {
IMSendResult result = new IMSendResult();
result.setSender(message.getSender());
@@ -65,7 +65,7 @@ public class IMSender {
}
// 获取终端连接的channelId
String key = String.join(":", IMRedisKey.IM_USER_SERVER_ID, message.getSender().getId().toString(), terminal.toString());
- Integer serverId = (Integer)redisTemplate.opsForValue().get(key);
+ Integer serverId = (Integer)redisMQTemplate.opsForValue().get(key);
// 如果终端在线,将数据存储至redis,等待拉取推送
if (serverId != null) {
String sendKey = String.join(":", IMRedisKey.IM_MESSAGE_PRIVATE_QUEUE, serverId.toString());
@@ -76,7 +76,7 @@ public class IMSender {
recvInfo.setSender(message.getSender());
recvInfo.setReceivers(Collections.singletonList(new IMUserInfo(message.getSender().getId(), terminal)));
recvInfo.setData(message.getData());
- redisTemplate.opsForList().rightPush(sendKey, recvInfo);
+ redisMQTemplate.opsForList().rightPush(sendKey, recvInfo);
}
}
}
@@ -97,7 +97,7 @@ public class IMSender {
});
}
// 批量拉取
- List