2015-09-29 3 views
1

Я использую jersey-client-1.2 для доступа к API REST EHCache, чтобы поместить/получить свои собственные пользовательские объекты.Jersey-Client 1.2 - Проблема с производительностью клиента Джерси

Джерси Maven зависимости:

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

Client Код:

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)); 

Когда я выполнить нагрузочный тест с кодом выше, сервер приложений (где выше клиент работает) дает плохую производительность. Большинство потоков перешло в стадию ожидания из-за вызова клиента jersey. Однако сервер, на котором развертываются API REST кэша, отвечает правильно. Кажется, что джерси-клиент не работает хорошо.

Я следую лучшим практикам клиента Джерси в вышеуказанном коде? Я пропускаю все, что вызывает проблемы с производительностью? Любая идея, пожалуйста.

+0

Не получил ответа до настоящего времени. ответьте, пожалуйста –

ответ

5

У меня есть решение. Я создавал jersey-клиент по каждому запросу. В соответствии с jersey 2.0 document, создание клиента по каждому запросу слишком costly.Below раздел берется из того же документа:

экземпляры Клиентские дорогие ресурсы. Рекомендуется использовать сконфигурированный экземпляр для создания веб-ресурсов. Создание веб-ресурсов, создание запросов и получение ответов гарантированно будет потокобезопасным. Таким образом, экземпляр клиента и экземпляров WebResource могут быть разделены между несколькими потоками

Как jersey client is thread safe, я сразу же создал клиент и установить его в качестве одноплодного класса переменных. Затем созданный веб-ресурс от одного и того же клиента для разных запросов. Таким образом, Client.create() должен вызываться только один раз для нескольких запросов.

После тестирования приложения с нагрузкой он работал как шарм и дал очень хороший результат. Производительность улучшилась почти на 95%.