Sfoglia il codice sorgente

fix: 在线状态异常的bug

xsx 1 anno fa
parent
commit
3ffd84498b

+ 1 - 1
README.md

@@ -57,7 +57,7 @@
 - redis记录了每个用户的websocket连接的是哪个im-server,当用户发送消息时,im-platform将根据所连接的im-server的id,决定将消息推向哪个queue
 
 
-#### 本地快速部署
+#### 本地启动
 1.安装运行环境
 - 安装node:v18.19.0
 - 安装jdk:17

+ 0 - 39
im-platform/src/main/java/com/bx/implatform/config/RedissonConfig.java

@@ -1,39 +0,0 @@
-package com.bx.implatform.config;
-
-import cn.hutool.core.util.StrUtil;
-import org.redisson.Redisson;
-import org.redisson.api.RedissonClient;
-import org.redisson.client.codec.StringCodec;
-import org.redisson.config.Config;
-import org.redisson.config.SingleServerConfig;
-import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
-import org.springframework.context.annotation.Bean;
-
-/**
- * @author: Blue
- * @date: 2024-06-09
- * @version: 1.0
- */
-
-//@Configuration
-//@ConditionalOnClass(Config.class)
-//@EnableConfigurationProperties(RedisProperties.class)
-public class RedissonConfig {
-
-    @Bean
-    RedissonClient redissonClient(RedisProperties redisProperties) {
-        Config config = new Config();
-        config.setCodec(new StringCodec());
-        String address = "redis://" + redisProperties.getHost()+":"+redisProperties.getPort();
-        SingleServerConfig serverConfig = config.useSingleServer()
-            .setAddress(address)
-            .setDatabase(redisProperties.getDatabase());
-        if(StrUtil.isNotEmpty(redisProperties.getPassword())) {
-            serverConfig.setPassword(redisProperties.getPassword());
-        }
-
-        return Redisson.create(config);
-    }
-
-
-}

+ 35 - 0
im-server/src/main/java/com/bx/imserver/config/RedisConfig.java

@@ -0,0 +1,35 @@
+package com.bx.imserver.config;
+
+import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig {
+
+    @Primary
+    @Bean
+    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
+        RedisTemplate<String, Object> 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);
+    }
+
+
+}

+ 1 - 1
im-server/src/main/java/com/bx/imserver/netty/IMChannelHandler.java

@@ -71,7 +71,7 @@ public class IMChannelHandler extends SimpleChannelInboundHandler<IMSendInfo> {
             // 移除channel
             UserChannelCtxMap.removeChannelCtx(userId, terminal);
             // 用户下线
-            RedisTemplate<String, Object> redisTemplate = SpringContextHolder.getBean("redisTemplate");
+            RedisTemplate<String, Object> redisTemplate = SpringContextHolder.getBean(RedisTemplate.class);
             String key = String.join(":", IMRedisKey.IM_USER_SERVER_ID, userId.toString(), terminal.toString());
             redisTemplate.delete(key);
             log.info("断开连接,userId:{},终端类型:{},{}", userId, terminal, ctx.channel().id().asLongText());