最近在做一個springboot的項目
然后集成了netty在里面用來推送或聊天的。
寫代碼的時候想把用戶連接成功后的channelid 存到redis里面,結(jié)果有了下面代碼
public class NettyLoginHandler implements NettyMessageHandler{
@Autowired
private RedisCache redisCache;
@Override
public void handleMsg(NettyRequestDto message) {
redisCache.setCacheObject(NettyConstants.CHANNEL_REDIS_KEY+message.getUserId(),message.getCtx().channel().id());
NettyResponseDto dto = new NettyResponseDto();
dto.setType(0);
dto.setData("登陸成功");
byte[] bytes = dto.toString().getBytes(CharsetUtil.UTF_8);
ByteBuf buf = Unpooled.wrappedBuffer(bytes);
message.getCtx().channel().writeAndFlush(new TextWebSocketFrame(buf));
}
}
我注入的redisCache一直報空指針
一直沒想明白,查閱資料后代碼修改為如下
**
*
* Created by tcw on 2020/7/30.
*/
@Component//把這個類交給spring管理
public class NettyLoginHandler implements NettyMessageHandler{
@Autowired
private RedisCache redisCache;
private static NettyLoginHandler nettyLoginHandler;
@PostConstruct
public void init(){
nettyLoginHandler = this;
}
@Override
public void handleMsg(NettyRequestDto message) {
nettyLoginHandler.redisCache.setCacheObject(NettyConstants.CHANNEL_REDIS_KEY+message.getUserId(),message.getCtx().channel().id());
NettyResponseDto dto = new NettyResponseDto();
dto.setType(0);
dto.setData("登陸成功");
byte[] bytes = dto.toString().getBytes(CharsetUtil.UTF_8);
ByteBuf buf = Unpooled.wrappedBuffer(bytes);
message.getCtx().channel().writeAndFlush(new TextWebSocketFrame(buf));
}
}
大概意思是,這個類我spring不管了?
因為netty是新線程跑的嗎?
參考:
https://blog.csdn.net/qq_39851704/article/details/80392867