Преглед изворни кода

im-client支持多个服务连接

blue пре 2 година
родитељ
комит
136b5567c8

+ 1 - 0
im-client/src/main/java/com/bx/imclient/IMAutoConfiguration.java

@@ -9,4 +9,5 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 @ComponentScan("com.bx.imclient")
 public class IMAutoConfiguration {
+
 }

+ 6 - 0
im-client/src/main/java/com/bx/imclient/sender/IMSender.java

@@ -9,6 +9,7 @@ import com.bx.imcommon.enums.IMSendCode;
 import com.bx.imcommon.enums.IMTerminalType;
 import com.bx.imcommon.model.*;
 import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
@@ -22,6 +23,9 @@ public class IMSender {
     @Resource(name="IMRedisTemplate")
     private RedisTemplate<String, Object> redisTemplate;
 
+    @Value("${spring.application.name}")
+    private String appName;
+
     private final MessageListenerMulticaster listenerMulticaster;
 
     public<T> void sendPrivateMessage(IMPrivateMessage<T> message) {
@@ -35,6 +39,7 @@ public class IMSender {
                 IMRecvInfo recvInfo = new IMRecvInfo();
                 recvInfo.setCmd(IMCmdType.PRIVATE_MESSAGE.code());
                 recvInfo.setSendResult(message.getSendResult());
+                recvInfo.setServiceName(appName);
                 recvInfo.setSender(message.getSender());
                 recvInfo.setReceivers(Collections.singletonList(new IMUserInfo(message.getRecvId(), terminal)));
                 recvInfo.setData(message.getData());
@@ -106,6 +111,7 @@ public class IMSender {
             recvInfo.setCmd(IMCmdType.GROUP_MESSAGE.code());
             recvInfo.setReceivers(new LinkedList<>(entry.getValue()));
             recvInfo.setSender(message.getSender());
+            recvInfo.setServiceName(appName);
             recvInfo.setSendResult(message.getSendResult());
             recvInfo.setData(message.getData());
             // 推送至队列

+ 8 - 2
im-client/src/main/java/com/bx/imclient/task/GroupMessageResultResultTask.java

@@ -1,11 +1,14 @@
 package com.bx.imclient.task;
 
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.bx.imclient.listener.MessageListenerMulticaster;
 import com.bx.imcommon.contant.IMRedisKey;
 import com.bx.imcommon.enums.IMListenerType;
 import com.bx.imcommon.model.IMSendResult;
 import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
@@ -13,17 +16,20 @@ import javax.annotation.Resource;
 import java.util.concurrent.TimeUnit;
 
 @Component
-@AllArgsConstructor
+@RequiredArgsConstructor
 public class GroupMessageResultResultTask extends AbstractMessageResultTask {
 
     @Resource(name = "IMRedisTemplate")
     private RedisTemplate<String,Object> redisTemplate;
 
+    @Value("${spring.application.name}")
+    private String appName;
+
     private final MessageListenerMulticaster listenerMulticaster;
 
     @Override
     public void pullMessage() {
-        String key = IMRedisKey.IM_RESULT_GROUP_QUEUE;
+        String key = StrUtil.join(":",IMRedisKey.IM_RESULT_GROUP_QUEUE,appName);
         JSONObject jsonObject = (JSONObject)redisTemplate.opsForList().leftPop(key,10, TimeUnit.SECONDS);
         if(jsonObject != null) {
             IMSendResult result =  jsonObject.toJavaObject(IMSendResult.class);

+ 8 - 3
im-client/src/main/java/com/bx/imclient/task/PrivateMessageResultResultTask.java

@@ -1,12 +1,15 @@
 package com.bx.imclient.task;
 
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.bx.imclient.listener.MessageListenerMulticaster;
 import com.bx.imcommon.contant.IMRedisKey;
 import com.bx.imcommon.enums.IMListenerType;
 import com.bx.imcommon.model.IMSendResult;
 import lombok.AllArgsConstructor;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
@@ -15,18 +18,20 @@ import java.util.concurrent.TimeUnit;
 
 @Slf4j
 @Component
-@AllArgsConstructor
+@RequiredArgsConstructor
 public class PrivateMessageResultResultTask extends AbstractMessageResultTask {
 
-
     @Resource(name = "IMRedisTemplate")
     private RedisTemplate<String,Object> redisTemplate;
 
+    @Value("${spring.application.name}")
+    private String appName;
+
     private final MessageListenerMulticaster listenerMulticaster;
 
     @Override
     public void pullMessage() {
-        String key = IMRedisKey.IM_RESULT_PRIVATE_QUEUE;
+        String key = StrUtil.join(":",IMRedisKey.IM_RESULT_PRIVATE_QUEUE,appName);
         JSONObject jsonObject = (JSONObject)redisTemplate.opsForList().leftPop(key,10, TimeUnit.SECONDS);
         if(jsonObject != null) {
             IMSendResult result =  jsonObject.toJavaObject(IMSendResult.class);

+ 4 - 0
im-commom/src/main/java/com/bx/imcommon/model/IMRecvInfo.java

@@ -27,6 +27,10 @@ public class IMRecvInfo {
      */
     private Boolean sendResult;
 
+    /**
+     * 当前服务名(回调发送结果使用)
+     */
+    private String serviceName;
     /**
      * 推送消息体
      */

+ 1 - 0
im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java

@@ -86,6 +86,7 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
         IMGroupMessage<GroupMessageVO> sendMessage = new IMGroupMessage<>();
         sendMessage.setSender(new IMUserInfo(session.getUserId(), session.getTerminal()));
         sendMessage.setRecvIds(userIds);
+        sendMessage.setSendResult(false);
         sendMessage.setData(msgInfo);
         imClient.sendGroupMessage(sendMessage);
         log.info("发送群聊消息,发送id:{},群聊id:{},内容:{}", session.getUserId(), dto.getGroupId(), dto.getContent());

+ 2 - 0
im-platform/src/main/resources/application.yml

@@ -3,6 +3,8 @@ server:
   port: 8888
 #配置项目的数据源
 spring:
+  application:
+    name: im-platform
   mvc:
     pathmatch:
       matching-strategy: ant_path_matcher

+ 2 - 1
im-server/src/main/java/com/bx/imserver/netty/processor/GroupMessageProcessor.java

@@ -1,5 +1,6 @@
 package com.bx.imserver.netty.processor;
 
+import cn.hutool.core.util.StrUtil;
 import com.bx.imcommon.contant.IMRedisKey;
 import com.bx.imcommon.enums.IMCmdType;
 import com.bx.imcommon.enums.IMSendCode;
@@ -64,7 +65,7 @@ public class GroupMessageProcessor extends AbstractMessageProcessor<IMRecvInfo>
             result.setCode(sendCode.code());
             result.setData(recvInfo.getData());
             // 推送到结果队列
-            String key = IMRedisKey.IM_RESULT_GROUP_QUEUE;
+            String key = StrUtil.join(":",IMRedisKey.IM_RESULT_GROUP_QUEUE,recvInfo.getServiceName());
             redisTemplate.opsForList().rightPush(key, result);
         }
     }

+ 2 - 1
im-server/src/main/java/com/bx/imserver/netty/processor/PrivateMessageProcessor.java

@@ -1,5 +1,6 @@
 package com.bx.imserver.netty.processor;
 
+import cn.hutool.core.util.StrUtil;
 import com.bx.imcommon.contant.IMRedisKey;
 import com.bx.imcommon.enums.IMCmdType;
 import com.bx.imcommon.enums.IMSendCode;
@@ -57,7 +58,7 @@ public class PrivateMessageProcessor extends AbstractMessageProcessor<IMRecvInfo
             result.setCode(sendCode.code());
             result.setData(recvInfo.getData());
             // 推送到结果队列
-            String key = IMRedisKey.IM_RESULT_PRIVATE_QUEUE;
+            String key = StrUtil.join(":",IMRedisKey.IM_RESULT_PRIVATE_QUEUE,recvInfo.getServiceName());
             redisTemplate.opsForList().rightPush(key, result);
         }
     }

+ 0 - 1
im-ui/src/components/chat/ChatBox.vue

@@ -256,7 +256,6 @@
 					let textNode = document.createTextNode(txt);
 					range.insertNode(textNode)
 					range.collapse();
-
 				}
 				let items = (event.clipboardData || window.clipboardData).items
 				if (items.length) {