净渠道生命周期

时间:2019-03-25 15:04:00

标签: java http netty

阅读网络指南和示例后,我仍然有一些疑问:

我的应用程序与多个第三方端点进行通信。为此,我使用通过Netty实现的http客户端。 所以基本上流程如下

  1. Http调用以执行操作1 -一些业务逻辑处理-
  2. Http调用以执行操作2 -一些业务逻辑处理-
  3. Http调用以执行操作3 -一些业务逻辑处理-

每个操作都在不同的线程中执行。

Q1:我是否需要为每个新请求创建并关闭通道,还是只需要对每个Endint重复使用相同的通道并使用它直到可用即可。

Q2:当我与多个系统通信时,我想必须使用某种类型的通道池吗?

Q3:如果必须重用通道,如何处理关闭的通道。假设我有多个线程想要触发对同一通道的http请求,而第一个失败是因为连接已关闭。我是否需要协调/锁定线程以等待创建新通道并仅在再次打开新通道后才能继续进行操作?

Q4:我何时希望每个端点拥有多个通道? (也许我想利用更好的处理器内核吗?)

1 个答案:

答案 0 :(得分:0)

这是一个非常不错的教程,列出了它是如何工作的。 Netty IO。您只需要创建一些资源。可以重复使用作为线程的事件循环组。从本质上讲,如果您正确设置了频道,则实际上不必担心该频道。只需使用通道进行读写,或使用处理程序即可完成工作。完成后,关闭通道,但不要关闭EventLoopGroup,因为您需要将其交给另一个引导程序。如果您要建立大量连接,则可以使用通道池,但这通常不是必需的。

我也推荐本指南,它将回答您其他问题。它告诉您如何从其他线程等更好地写入通道。 Netty Best Practices

您所提出的其他问题都是针对案例的。为什么不设置测试主要方法或测试单元,并通过两个链接(如果不是另一个或两个教程)来尝试一下呢? Netty可能是一个复杂的野兽,您几乎可以做任何您想做的事,但是它确实提供了入门网络级别所需的一切,而无需太多的复杂性。 Another one for the road,还请检查其样本Examples from Netty。他们的样本代表了最常见的用例和网络协议的基本级别。