问题标签 [netty4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
51 浏览

tcp - Apache Camel TCP 客户端与服务器通信

我是apache骆驼的新手。我想要做的是我已经暴露和 Rest api 来获取数据。从那里我需要与现有的 TCP 服务器(简单的 java 服务器应用程序)通信以检索数据并发送回客户端。我选择的是 Apache camel 来做这个集成。

以上是我定义路线的方式,但是当我尝试运行应用程序时,我得到以下错误

org.apache.camel.FailedToCreateRouteException:无法在以下位置创建路由 route5:>>> To[netty://tcp://127.0.0.1:9898] <<< 在路由中:Route(route5)[From[direct:get -weather-data] -> [process[Proc... 因为找不到端点:netty://tcp://127.0.0.1:9898,请检查您的类路径是否包含所需的 Camel 组件 jar。

请指教如何解决这个问题。

0 投票
0 回答
41 浏览

netty - 如何并行处理部分排序的消息?

基于我的 Netty 的应用程序

  1. 每秒从单个 TCP 连接接收数十万条消息
  2. 在几个入站处理程序中处理这些消息
  3. 将处理结果发送到下游某处

目前,所有这些都在线程上运行,因为它在单个 TCP 连接上。我想知道如何并行化 2。困难在于消息不能随意并行处理,因为消息有部分顺序。你可以把它想象成有一个key(message)函数,这个函数返回相同结果的所有消息都需要按顺序处理,但如果结果不同,它们可能会并行运行。所以我想有一个从消息到线程的映射,比如hash(key(message)) % threadCount.

想象一下这个管道:

在解码器中,我能够计算 的结果key(message),所以我想并行化解码器下游的所有内容。据记载,为了使用多个线程,我可以做

我猜这意味着bizLogicHandler1和它下面的所有东西(在上面的例子中是bizLogicHandler2)将能够并行运行?(或者我是否也必须group为 bizLogicHandler2 指定?)

然而,正如文档所解释的那样,上述内容仍将完全串行运行,提供UnorderedThreadPoolEventExecutor作为最大化并行性的替代方案,代价是完全摆脱排序,这在我的情况下不起作用。

查看接口EventExecutorGroupEventExecutor,我看不出如何传达哪些消息可以并行处理,哪些消息必须按顺序处理。

任何想法?

0 投票
0 回答
52 浏览

netty - 泄漏 io.netty.channel.nio.NioEventLoop 实例

我们使用netty来构建一个数据传输协议。只是现在正在从 netty 3.10 升级到 netty 4.1 的过程中。升级后,由于 NioEventLoop 实例的堆耗尽,现在运行应用程序一段时间会遇到 OOM。hprof 的泄漏分析表明以下泄漏嫌疑人:

具有最大 Retained Heap 的对象的直方图:

这是否表明在从 netty 3 升级到 4 时与某些资源的释放有关的一些常见错误?

编辑:找到罪魁祸首泄漏。我们有一个重用的客户端方法,每个调用都会实例化一个新的 EventLoopGroup,从而泄漏先前实例化的线程池。修复它并解决 OutOfMemory 问题。

0 投票
0 回答
17 浏览

java - 使用 Netty Http Server 设置 URL

我正在尝试为 Http 设置 Netty Server 4.15。我已经设置了我的 Html 编码器/解码器,以及请求处理程序。我这样声明:

当我去的时候这很好用

如何配置它以使其仅适用于某个 URL?喜欢

0 投票
0 回答
25 浏览

java - netty ssl 密钥交换模式,如何在 netty 中使用 TLS-PSK 模式

我们用的是Netty4,打算扩展Netty的SSL安全模式,不确定Netty4是否支持PSK密钥交换模式,有知道这方面的人指导一下,非常感谢

0 投票
0 回答
21 浏览

sockets - Apache Camel - 断管异常锁定路由和 JMS 消费者

我们在使用单线程路由时遇到问题,从 ActiveMQ 队列中出列消息,以下是路由配置:

而这是 routeContext 上的线程池配置:

在将消息出列后,它会经过一些处理,然后我们必须通过套接字(netty4)将其发送到外部系统(我们称之为 ES1),以下是 netty4 参数配置:

从参数中可以看出,我们将reuseChannel 设置为true,因为对于我们从AMQ 出列的每条消息,我们需要在将实际消息发送到ES1 之前和之后发送一个start_buzzer 和一个stop_buzzer。所以要明确一点:消息出列,解析,然后将 start_buzzer 发送到 ES1,然后消息出去,最后发送 stop_buzzer。来自 AMQ 的一条消息 = 与 ES1 的套接字上的三个通信。套接字上的所有请求都使用接收者列表组件发送:

(displayConnection 是我们在同一路由上的前一个处理器中设置的属性,它包含整个 netty4 uri)

在测试环境中,我们实际上没有测试 ES1,因此我们使用在另一个 linus 服务器上打开的 NCAT 来模拟它,以便重现实际的套接字侦听器。以下场景给使用带来了一些问题: 从 AMQ 出列 1 条消息后,它开始通过路由;路由处理后发送start_buzzer给NCAT,NCAT接收;此时,在我们看到 NCAT 上接收到的实际消息之前,我们将其关闭 (CTRL+C);从这里开始,我们在 Apache Camel 日志(在 TRACE 级别)上看到路由继续进一步处理 Exchange:它显然将消息发送出去(即使 NCAT 已关闭),然后在发送 stop_buzzer 之前,路由本身似乎走了上锁。

从此时起,不再有消息从 AMQ 出列。我们在日志中看到的是:

(在 R 上是 ES1,在 L 上当然是我们的 Apache Camel)

似乎将 reuseChannel 设置为 true 会破坏通道(当 ncat 不再可达时),尽管 Camel 本身不会重新创建通道。这似乎锁定了我们在路由上允许的唯一 JMS 消费者。这里有什么方法可以强制解锁 JMS 消费者吗?为什么会这样?如果通道坏了,为什么 IOException 没有被我们的 onException 组件捕获?

信息:单线程池和 maxConsumer=1 是强制配置;骆驼版本是2.17。