正确等待sql i / o完成的方法

时间:2012-01-06 14:34:53

标签: netty

有没有人有一个简单的代码示例显示netty 3.2.7 应该在以下场景中正确处理SQL查询:

调用方法将消息传递给服务器messageReceived 方法。 messageRecieved方法执行sql查询并获取 结果。调用方法不应继续处理,直到它 获取sql查询的结果。

特别是netty等待的方式的一个例子 完成i / o(sql查询)会非常有用。

2 个答案:

答案 0 :(得分:0)

您需要在执行sql查询的处理程序前添加ExecutionHandler。多数民众赞成......

否则你将阻止你的工作线程

答案 1 :(得分:0)

Norman感谢您提供更多信息。我认为这可以解决这个问题,但它涉及添加一个并不是真正需要的额外处理程序,并且纯粹是为了确保sql查询已经完成(没有任何功能)而添加。

我找了一个“更标准”的方式并找到了链接 “http://docs.jboss.org/netty/3.2/api/org/jboss/netty/channel/ChannelFuture.html”其中说“提供了各种方法来检查I / O操作是否已完成,等待完成,并检索I / O操作的结果。它还允许您添加ChannelFutureListeners,以便在I / O操作完成时得到通知....“

它还说prefer addListener(ChannelFutureListener)到await()但我不知道如何实现它。 如果有人知道如何实现它来等待i / o sql查询的结果完成它将非常有用。

要解决我使用的sendMessage方法中的问题

lastWriteFuture = connector.write(message);
if (lastWriteFuture != null) {
      lastWriteFuture.awaitUninterruptibly();
}

这样做 - 它等待sql查询完成然后返回给调用者。