使用队列解决高并发下使用Client对象调用webService接口

简介: 使用队列解决高并发下使用Client对象调用webService接口

解释:在高并发情况下,重复的创建Client对象会大量占用内存,并且开销昂贵,将其保存到队列当中,避免重复创建对象;调用Client的时候先从队列中取,如果有则使用队列中的Client,如果没有则创建,最后都还将client对象重新放入队列供下次使用。

注:同一客户端同一时刻只能被一个线程消费,否则可能会因争用导致莫名其妙的错误,所以阻塞队列。

代码示例:

/**
 * 获取Client工具类--使用队列存放client防止并发
 * @author : jiagang
 * @date : Created in 2022/3/7 10:30
 */
public class ClientUtil {
    private static final BlockingQueue<Client> blockingQueue = new LinkedBlockingQueue<>(50);
    public static Client getClient() throws InterruptedException {
        Client client = blockingQueue.poll();
        if(client == null){
            JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
            client = clientFactory.createClient("http://xxx/xxx/xxx?wsdl");
        }
        HTTPConduit conduit = (HTTPConduit) client.getConduit();
        HTTPClientPolicy policy = new HTTPClientPolicy();
        policy.setConnectionTimeout(5000);
        policy.setAllowChunking(false);
        policy.setReceiveTimeout(5000);
        conduit.setClient(policy);
        // 用完之后将client再放入队列中
        // blockingQueue.put(client); //队列满了会阻塞
        blockingQueue.offer(client);
        return client;
    }

文章持续更新,可以关注下方公众号或者微信搜一搜「 最后一支迷迭香 」第一时间阅读,获取更完整的链路资料。

相关文章
|
2月前
|
存储 Java
高并发编程之多线程锁和Callable&Future 接口
高并发编程之多线程锁和Callable&Future 接口
53 1
|
8天前
|
设计模式 安全 NoSQL
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
11 0
|
2月前
|
存储 监控 BI
HIS系统是什么?一套前后端分离云HIS系统源码 接口技术RESTful API + WebSocket + WebService
医院管理信息系统(全称为Hospital Information System)即HIS系统。 常规模版包括门诊管理、住院管理、药房管理、药库管理、院长查询、电子处方、物资管理、媒体管理等,为医院管理提供更有力的保障。 HIS系统以财务信息、病人信息和物资信息为主线,通过对信息的收集、存储、传递、统计、分析、综合查询、报表输出和信息共享,及时为医院领导及各部门管理人员提供全面、准确的各种数据。 门诊医生工作站采用下拉式汉化菜单,界面友好,实用性强,设有与门诊挂号收费系统、医技科室信息系统、住院结算信息系统的软件接口。
63 1
|
2月前
|
Java
高并发编程之什么是 Lock 接口
高并发编程之什么是 Lock 接口
37 1
|
11月前
|
关系型数据库 分布式数据库 数据库
沉浸式学习PostgreSQL|PolarDB 2: 电商高并发秒杀业务、跨境电商高并发队列消费业务
业务场景介绍: 高并发秒杀业务 秒杀业务在电商中最为常见, 可以抽象成热点记录(行)的高并发更新. 而通常在数据库中最细粒度的锁是行锁, 所以热门商品将会被大量会话涌入, 出现锁等待, 甚至把数据库的会话占满, 导致其他请求无法获得连接产生业务故障. 业务场景介绍: 高并发队列消费业务 在跨境电商业务中可能涉及这样的场景, 由于有上下游产业链的存在, 1、用户下单后, 上下游厂商会在自己系统中生成一笔订单记录并反馈给对方, 2、在收到反馈订单后, 本地会先缓存反馈的订单记录队列, 3、然后后台再从缓存取出订单并进行处理.
352 1
|
11月前
|
关系型数据库 测试技术 分布式数据库
PolarDB | PostgreSQL 高并发队列处理业务的数据库性能优化实践
在电商业务中可能涉及这样的场景, 由于有上下游关系的存在, 1、用户下单后, 上下游厂商会在自己系统中生成一笔订单记录并反馈给对方, 2、在收到反馈订单后, 本地会先缓存反馈的订单记录队列, 3、然后后台再从缓存取出订单并进行处理. 如果是高并发的处理, 因为大家都按一个顺序获取, 容易产生热点, 可能遇到取出队列遇到锁冲突瓶颈、IO扫描浪费、CPU计算浪费的瓶颈. 以及在清除已处理订单后, 索引版本未及时清理导致的回表版本判断带来的IO浪费和CPU运算浪费瓶颈等. 本文将给出“队列处理业务的数据库性能优化”优化方法和demo演示. 性能提升10到20倍.
703 4
|
10月前
|
消息中间件 缓存 NoSQL
高并发缓存队列防止溢出解决方案
高并发缓存队列防止溢出解决方案
181 0
|
10月前
|
网络安全 网络架构
https请求SOAP webService接口
https请求SOAP webService接口
96 0
|
11月前
|
NoSQL 前端开发 Java
高并发下接口幂等性解决方案
高并发下接口幂等性解决方案
|
11月前
|
安全 Java 开发者
【Java|多线程与高并发】JUC中常用的类和接口
JUC是Java并发编程中的一个重要模块,全称为Java Util Concurrent(Java并发工具包),它提供了一组用于多线程编程的工具类和框架,帮助开发者更方便地编写线程安全的并发代码。