1

我正在将 Netty 3 应用程序移植到 Netty 4。Netty 3 应用程序用于Attachement将对象附加到上下文。

在 4.0 中阅读新的和值得注意的我看到附件已被删除并替换为 AttributeKey/AttributeMap。

问题是这在我运行应用程序时有效,但在集成测试中,我收到错误:

Caused by: java.lang.IllegalArgumentException: 'attr_key' is already in use

attr_key可共享处理程序中定义的位置如下:

private final AttributeKey<Object> ATTR_KEY = AttributeKey.newInstance("attr_key");

然后在同一个处理程序类的其他地方使用如下:

channel.attr(ATTR_KEY).set(new Object())

关于使用 AttributeKey/AttributeMap 以防止此错误的推荐方法的任何想法或想法?谢谢!

4

1 回答 1

0

使用属性键时,请确保只构建它们 1 次。

这意味着,您需要将它们存储在一个private static final变量中,一个private final变量不够好,因为它在多次构造类时会出错。

如果无法确保方法newInstance方法被单次调用,则需要使用AttributeKey.valueOf,因此它会关闭冲突检测。这对于某些单元测试框架是必需的,其中库被加载 1 次,但应用程序代码是动态重启的。

于 2021-02-08T13:52:09.490 回答