最近用netty实现了一个简单的消息系统,消息数据暂时设计是保存在数据库,分为消息主体表和最新消息表,在目前的逻辑设计中,一旦将最新消息表对应的的消息发送出去后,就把该条消息删除,因为Netty所有的I/O操作都是异步的,所以如果想要在I/O操作后加一些固定要执行的逻辑,应该优先使用addListener(GenericFutureListener)的方式来完成,否则很可能导致最新消息表中的消息不会被删除,导致消息重发,参考代码如下:
ChannelFuture future = channel.writeAndFlush(new TextWebSocketFrame(mapJsonobject.toString()));future.addListener(new ChannelFutureListener() {@Overridepublic void operationComplete(ChannelFuture channelFuture) throws Exception {if (channelFuture.isDone() && channelFuture.isSuccess()) {}}});