2

我有一个使用RTI DDS的应用程序dynamic data来设置我的消息。

当我尝试发送300kb文件中的字符串时,我收到以下错误代码:

com.rti.dds.infrastructure.RETCODE_OUT_OF_RESOURCES
    at com.rti.dds.util.Utilities.rethrow(Unknown Source) ~[nddsjava.jar:?]
    at com.rti.dds.infrastructure.RETCODE_ERROR.check_return_codeI(Unknown Source) ~[nddsjava.jar:?]
    at com.rti.dds.dynamicdata.DynamicData.set_string(Unknown Source) ~[nddsjava.jar:?]

我在他们的论坛上搜索并尝试了我能想到的对我的 QOS 策略文件的所有更改以避免此错误,但没有一个有效。

我认为现在解决此问题的最佳方法是找到问题的根本原因,但是我碰壁了,无法弄清楚它是否与操作系统相关、内存泄漏或什么。

有谁知道是什么可能导致我与 RTI DDS 出现此问题?

4

1 回答 1

1

在您的评论中,您表示您解决了问题。其他人了解它可能仍然有用,特别是考虑到情况取决于您使用的 Connext 版本。因此我的回答在这里。

对象的DynamicData()构造com.rti.dds.dynamicdata.DynamicData函数有一个调用typeTypeCode的参数和一个调用property类的参数DynamicDataProperty_t。后者配置新创建对象的行为,特别是在内存分配和资源限制方面。

显然,您使用该值com.rti.dds.dynamicdata.DYNAMIC_DATA_PROPERTY_DEFAULT作为property参数。对于旧版本的 RTI 产品(之前5.2.0),这意味着该buffer_max_size属性被设置为 65536 字节的值。这对您的对象来说是不够的,RETCODE_OUT_OF_RESOURCES结果是一个例外。解决方案是传递您自己的属性对象实例化并将 设置为buffer_max_size足够大的值。

对于当前版本的产品,这不再是必需的。buffer_max_size现在的默认值为ResourceLimitsQosPolicy.LENGTH_UNLIMITED,表示缓冲区没有最大大小。

于 2016-11-22T04:31:45.470 回答