Commit a057f7c2 by Future

内存泄露问题处理

parent 43d23543
package com.wecloud.im.balance;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingFactory;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Map;
import static com.wecloud.im.ws.model.WsConstants.IP_NETTY_PUBLIC;
@Component
@Slf4j
public class WsInstance {
@Value("${spring.cloud.nacos.discovery.server-addr}")
private String addr;
/**
* 返回一个健康实例的公网ip
*
* @return
* @throws NacosException
*/
public String selectOneHealthyInstance() throws NacosException {
NamingService naming = NamingFactory.createNamingService(addr);
Instance wecloudIm = naming.selectOneHealthyInstance("wecloud_im");
Map<String, String> metadata = wecloudIm.getMetadata();
String publicIp = metadata.get(IP_NETTY_PUBLIC);
log.info("get_wecloud_im_publicIp:" + publicIp);
return publicIp;
}
}
package com.wecloud.im.service.impl; package com.wecloud.im.service.impl;
import io.geekidea.springbootplus.config.properties.JwtProperties;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.shiro.cache.AppLoginRedisService;
import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken;
import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import java.time.Duration;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cn.hutool.crypto.digest.MD5; import cn.hutool.crypto.digest.MD5;
import com.alibaba.nacos.api.exception.NacosException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.im.balance.WsInstance;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImClientDevice; import com.wecloud.im.entity.ImClientDevice;
...@@ -31,17 +12,25 @@ import com.wecloud.im.service.ImClientLoginService; ...@@ -31,17 +12,25 @@ import com.wecloud.im.service.ImClientLoginService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.im.vo.TokenVo; import com.wecloud.im.vo.TokenVo;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.config.properties.JwtProperties;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.shiro.cache.AppLoginRedisService;
import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken;
import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.Duration;
import java.util.Date;
@Service @Service
@Slf4j @Slf4j
public class ImClientLoginServiceImpl implements ImClientLoginService { public class ImClientLoginServiceImpl implements ImClientLoginService {
// @Autowired
// private RedisUtils redisUtils;
// @Autowired
// private StringRedisTemplate redisTemplate;
private static JwtProperties jwtProperties; private static JwtProperties jwtProperties;
@Autowired @Autowired
private ImApplicationService imApplicationService; private ImApplicationService imApplicationService;
...@@ -51,8 +40,7 @@ public class ImClientLoginServiceImpl implements ImClientLoginService { ...@@ -51,8 +40,7 @@ public class ImClientLoginServiceImpl implements ImClientLoginService {
@Autowired @Autowired
private ImClientService imClientService; private ImClientService imClientService;
@Autowired
private WsInstance wsInstance;
@Autowired @Autowired
private AppLoginRedisService appLoginRedisService; private AppLoginRedisService appLoginRedisService;
...@@ -69,7 +57,7 @@ public class ImClientLoginServiceImpl implements ImClientLoginService { ...@@ -69,7 +57,7 @@ public class ImClientLoginServiceImpl implements ImClientLoginService {
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ApiResult<TokenVo> verifySign(ImTokenVerify imTokenVerify) throws NacosException { public ApiResult<TokenVo> verifySign(ImTokenVerify imTokenVerify) {
// 根据appKey从数据库查询密钥 // 根据appKey从数据库查询密钥
ImApplication imApplication = imApplicationService.getCacheAppByAppKey(imTokenVerify.getAppKey()); ImApplication imApplication = imApplicationService.getCacheAppByAppKey(imTokenVerify.getAppKey());
...@@ -119,14 +107,14 @@ public class ImClientLoginServiceImpl implements ImClientLoginService { ...@@ -119,14 +107,14 @@ public class ImClientLoginServiceImpl implements ImClientLoginService {
TokenVo tokenVo = new TokenVo(); TokenVo tokenVo = new TokenVo();
tokenVo.setToken(generateToken); tokenVo.setToken(generateToken);
tokenVo.setWsAddr(wsInstance.selectOneHealthyInstance()); tokenVo.setWsAddr("");
tokenVo.setId(imClient.getId()); tokenVo.setId(imClient.getId());
tokenVo.setAttributes(imClient.getAttributes()); tokenVo.setAttributes(imClient.getAttributes());
return ApiResult.ok(tokenVo); return ApiResult.ok(tokenVo);
} }
@Override @Override
public ApiResult<TokenVo> getToken(String clientId, Integer deviceType) throws NacosException { public ApiResult<TokenVo> getToken(String clientId, Integer deviceType) {
Long appId = SecurityUtils.getCurrentAppId(); Long appId = SecurityUtils.getCurrentAppId();
String appKey = SecurityUtils.getCurrentAppKey(); String appKey = SecurityUtils.getCurrentAppKey();
ImApplication imApplication = imApplicationService.getCacheAppByAppKey(appKey); ImApplication imApplication = imApplicationService.getCacheAppByAppKey(appKey);
...@@ -169,7 +157,7 @@ public class ImClientLoginServiceImpl implements ImClientLoginService { ...@@ -169,7 +157,7 @@ public class ImClientLoginServiceImpl implements ImClientLoginService {
TokenVo tokenVo = new TokenVo(); TokenVo tokenVo = new TokenVo();
tokenVo.setToken(generateToken); tokenVo.setToken(generateToken);
tokenVo.setWsAddr(wsInstance.selectOneHealthyInstance()); tokenVo.setWsAddr("");
tokenVo.setId(client.getId()); tokenVo.setId(client.getId());
tokenVo.setAttributes(client.getAttributes()); tokenVo.setAttributes(client.getAttributes());
return ApiResult.ok(tokenVo); return ApiResult.ok(tokenVo);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment