gpt4 book ai didi

java - 正确使用ReSTLet ClientResource

转载 作者:行者123 更新时间:2023-12-01 05:45:53 26 4
gpt4 key购买 nike

我在 ReSTLet(v 2.0.5)中的 ClientResource 遇到问题,这可能是由于不理解其正确用法造成的。

我正在使用 ClientResource 和 Apache HTTP 客户端连接器,并编写了以下内容:

        private final ClientResource httpClient;
public SendClient(String uri) {
httpClient = new ClientResource(uri);
}
// Omitted code would create messages to send, and then use an executor
// to send this particular message to its destination.
public void run() {
ClientResource sendClient = null;
try {
sendClient = wsClient.getChild(uriResource); // re-use original httpclient instance, uriResource is passed in to the method that calls this.
sendClient.post(form);
} catch (Throwable e) {
logger.error("Unable to send message, {}", e.getMessage());
} finally {
if (sendClient != null) {
sendClient.release(); // As I understand from [Restlet WIKI][1]
}
}
}

这是正确的吗?我怀疑事实并非如此,因为几个小时(7 个或更长时间)后,这部分代码开始抛出以下错误“内部服务器错误”,并且目标不再接收消息。

对我做错了什么有什么想法吗?

注意我知道 ClientResource 不是线程安全的,您会注意到在我的代码中我使用执行器来运行这部分代码,但是,该执行器仅包含一个线程,所以,直到我否则,我已经排除了这个问题。

注释 2:ClientResource javadoc 指出:“并发注释:该类的实例并非设计为在多个线程之间共享。如果需要线程安全,请考虑使用较低级别的 Client 类。”然而,reSTLet 创建者表示,实际上它是线程安全的,只是没有明确为此目的而设计。谢谢。

最佳答案

ClientResource 是线程安全的,但它并不是专门设计用于多个并发线程使用的,尽管这是可能的。但是,多次重复使用同一个实例是完全有效的。

回到您的问题,我们需要更详细的问题堆栈跟踪来帮助解决,因为“内部服务器错误”会导致服务器端而不是客户端出现问题。

希望这有帮助,杰罗姆

关于java - 正确使用ReSTLet ClientResource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5914598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com