
消息发布订阅demo;
@Slf4j
@Service
public class RidesTopicListener implements ApplicationRunner, Ordered {
private int order = 0;
@Resource
private RedissonClient redissonClient;
// 消息发布
public void pushMsg(Msg msg){
// 根据消息需要发送得到实例对象组装 topic
RTopic topic = redissonClient.getTopic(builderTopic(msg.getIp(),msg.getPort()));
topic.push(msg);
}
@Override
public void run(ApplicationArguments args) throws Exception {
RTopic topic = redissonClient.getTopic(builderTopic());
topic.addListener(Msg.class, (charSequence, mag) -> {
log.info("Redisson监听器收到发送给用户[{}]消息:{}", mag.getUserName(), mag.getContent());
});
}
// 构建topic;这里的topic 只要发送和接收的topic一致就可以收到消息了;
String builderTopic(String ip,int port){
return ip+"_"+port+"_"+"ws_topic";
}
@Override
public int getOrder() {
return ordered;
}
}
用户连接缓存,使用的map映射;(hash对象)