首页 文章

Jersey-Client 1.2 - 泽西客户端性能问题

提问于
浏览
1

我使用jersey-client-1.2访问EHCache REST API来放置/获取我自己的自定义对象 .

泽西Maven依赖:

<dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.2</version>
</dependency>

客户代码:

MyObject myObject = new MyObject();
myObject.setName("Narendra");

long start = System.currentTimeMillis();
Client client = Client.create();            
WebResource webResource = client.resource("http://localhost:9080/ehcache-server/rest/mycache/");
System.out.println("Time spend in creating client - " + (System.currentTimeMillis() - start));

start = System.currentTimeMillis();
ClientResponse putResponse = webResource.type("application/x-java-serialized-object").put(ClientResponse.class, SerializationUtils.serialize(myObject));
System.out.println("Time spend in serializing and putting Object into cache - " + (System.currentTimeMillis() - start));

start = System.currentTimeMillis();   
ClientResponse getResponse =  webResource.accept("application/x-java-serialized-object").get(ClientResponse.class);
byte[] bytes = getResponse.getEntity(byte[].class);
System.out.println("Time spend in getting and deseralizing object from cache " + (System.currentTimeMillis() - start));

当我使用上面的代码执行负载测试时,应用程序服务器(上面的客户端正在运行)会产生不良的性能 . 由于泽西客户端调用,大多数线程进入等待阶段 . 但是,部署缓存REST API的服务器响应正常 . 看来球衣客户端表现不佳 .

我是否遵循上述代码中的Jersey客户端的最佳做法?我错过了导致性能问题的任何问题吗?请问任何想法 .

1 回答

  • 6

    我得到了解决方案 . 我正在为每个请求创建泽西客户端 . 根据jersey 2.0 document,在每个请求上创建客户端的成本太高 . 下面的部分取自同一文档:

    客户端实例是昂贵的资源 . 建议重新使用已配置的实例来创建Web资源 . Web资源的创建,请求的构建和响应的接收都保证是线程安全的 . 因此,可以在多个线程之间共享Client实例和WebResource实例

    作为jersey client is thread safe,我立刻创建了客户端并将其设置为单例类作为变量 . 然后从同一客户端为不同的请求创建Web资源 . 因此,对于多个请求,必须只调用 Client.create() 一次 .

    经过负载测试应用后,它的功能就像魅力一样,给出了非常好的性能效果 . 性能提高了近95% .

相关问题