cxf-jaxws客户端在多并发情况下引起内存占用过多问题

在项目中使用webservice时,最常用的方式是通过创建动态客户端的方式,如下:

JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();

client = clientFactory.createClient(WS_ADDRESS);

但是在大量并发的情况下,重复的创建客户端会占用大量内存并且创建客户端的代价非常昂贵。因此,在每次使用完客户端之后将客户端保存到队列中,如下:

public static Client getClient(){

Client client = CLIENT_LINKED_BLOCKING_QUEUE.poll();

if(null == client){

JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();

client = clientFactory.createClient(WS_ADDRESS);

}

return client;

}

public static void closeClient(Client client) throws InterruptedException {

CLIENT_LINKED_BLOCKING_QUEUE.put(client);

}

这样即可避免重复创建客户端。需要注意的是,同一客户端同一时刻只能被一个线程消费,否则可能会因争用导致莫名其妙的错误。因此,队列采用的是阻塞队列。

你可能感兴趣的:(cxf-jaxws客户端在多并发情况下引起内存占用过多问题)