现状:华鸿平时每天有3W笔左右请求量,月初高峰期6W笔/天。
通信:Socket长链接
瓶颈:由于华鸿和移动网络问题原因,使华鸿内部处理慢,不能及时返回处理结果,导致我方有大量超时订单。同时在超时等待期间,线程资源不能及时释放,后续交易无法进来。
解决方案:同步转异步
即,1.网关收到交易请求之后,做必要的业务处理并组织请求报文包,然后将报文放进一个等待队列中,然后同步返回响应成功,释放资源。
2.等待队列维护两个线程:
SendThread:读取队列中的报文,写入socket 输出流,发送报文;
ReadThread:读取socket输入流,获取返回报文,将结果写入数据库异步通知表(第一方案是存放ConcurrentHashMap缓存对象,线程安全且读写速度快但不能保留数据,后持久化到数据库,能对通知信息更好的控制)。
3.起一个定时任务(5秒循环一次)扫描异步通知表,回调业务请求方,同时控制回调次数,超过3次便不再通知。