Jersey Client执行并行POST请求的正确方法

时间:2012-08-31 08:33:07

标签: java jersey apache-httpclient-4.x

我正在寻找使用jersey客户端(使用apache http client 4.x)执行POST请求的正确方法

由于Client实例和WebResource实例是线程安全的,编码方法的自然方式是:

public AuthorizedAccount createAuthTokenFromUserPass(Credentials credentials)
        throws AuthenticationServiceClientException {
    ClientResponse response = resource.accept("application/x-protobuf").post(
                              ClientResponse.class, credentials);
    return getAuthorizedAccountFromResponse(response);
}

ClientResponse实例已正确发布。

当从多个线程执行此方法时,它会通过将相同的凭据实例POST到服务器来为每个线程结束。

解决方案是同步方法,但最终会按顺序执行POST。

有不同的方法吗? (避免重新创建Client实例)

1 个答案:

答案 0 :(得分:0)

在花了很多时间试图弄清楚什么不能正常工作之后,我发现这个问题不是真的在泽西客户端实现中,而是在我自己的代码中。我使用了MessageBodyWriter的自定义实现,我不够小心。我没有正确阅读界面的合同。我在调用getSize()和writeTo()之间共享了一个实例变量,并且重用了MassageBodyWriter。