package com.qianwen.core.websocket.distribute;
|
|
import cn.hutool.json.JSONUtil;
|
import java.util.List;
|
import java.util.Properties;
|
import java.util.stream.Collectors;
|
import com.qianwen.core.tool.utils.Func;
|
import com.qianwen.core.tool.utils.SpringUtil;
|
import com.qianwen.core.websocket.config.ServerConfig;
|
import org.springframework.cloud.client.ServiceInstance;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
|
public class RedisMessageDistributor implements MessageDistributor {
|
private final StringRedisTemplate stringRedisTemplate;
|
|
public RedisMessageDistributor(final StringRedisTemplate stringRedisTemplate) {
|
this.stringRedisTemplate = stringRedisTemplate;
|
}
|
|
@Override
|
public void distribute(MessageDO messageDO) {
|
String host;
|
int port;
|
Properties props = System.getProperties();
|
String appName = props.getProperty("spring.application.name");
|
String channel = Func.isNotEmpty(appName) ? RedisWebsocketMessageListener.CHANNEL.concat("-").concat(appName) : RedisWebsocketMessageListener.CHANNEL;
|
ServiceInstance instance = null;
|
try {
|
instance = (ServiceInstance) SpringUtil.getBean(ServiceInstance.class);
|
} catch (Exception e) {
|
}
|
if (Func.isEmpty(instance)) {
|
port = ((ServerConfig) SpringUtil.getBean(ServerConfig.class)).getServerPort();
|
host = ((ServerConfig) SpringUtil.getBean(ServerConfig.class)).getHost();
|
} else {
|
host = instance.getHost();
|
port = instance.getPort();
|
}
|
if (Func.isNotEmpty(messageDO.getSessionKeys())) {
|
String str = host;
|
int i = port;
|
List<Object> sessionKeyList = messageDO.getSessionKeys().stream().map(key -> {
|
return String.format("%s:%s:%s", str, Integer.valueOf(i), key);
|
}).collect(Collectors.toList());
|
messageDO.setSessionKeys(sessionKeyList);
|
}
|
String str2 = JSONUtil.toJsonStr(messageDO);
|
this.stringRedisTemplate.convertAndSend(channel, str2);
|
}
|
}
|