WebService服务中,将写原始报文日志的功能由单独线程处理
2016-05-30 21:08
555 查看
在WebService项目中,Web容器对每个请求,创建一个独立的线程进行处理和响应。但是最近发现业务响应速度变慢,主要怀疑对象是I/O和网络socket操作占用时间长,I/O这一块儿主要是发送/接收报文时需要存储原始报文,便于查错和日后比对数据,比较明显跟主业务处理无关,于是首当其冲将其剥离除去。数据库操作是通过平台的xmlrpc请求完成的,优化复杂些,放到后面跟进。
这个问题可以归结为producer-consumer问题,业务线程是producer,不断产生需要写日志的原始报文信息,而写日志线程是consumer,有内容达到就取出进行写文件操作。
于是创建了一个实体,用于描述原始报文日志信息,选择了线程安全队列中的LinkedBlockingQueue用于线程之间消息传递。同时通过实现Runnable接口,在实现类的run() 方法中实现了业务处理逻辑,在线程池中中启动线程任务即可。
这个问题可以归结为producer-consumer问题,业务线程是producer,不断产生需要写日志的原始报文信息,而写日志线程是consumer,有内容达到就取出进行写文件操作。
于是创建了一个实体,用于描述原始报文日志信息,选择了线程安全队列中的LinkedBlockingQueue用于线程之间消息传递。同时通过实现Runnable接口,在实现类的run() 方法中实现了业务处理逻辑,在线程池中中启动线程任务即可。
相关文章推荐
- LeetCode:Longest Valid Parentheses
- listView优化
- guava常用简化操作
- KMP算法总结
- poj 2559
- iOS-URLconnection
- 简单介绍,基于ldirectord的高可用lvs-dr调度器
- 自定义异步AsyncTask
- MySQL中函数CONCAT及GROUP_CONCAT
- 36. Valid Sudoku
- 让sql语句不排序,按照in语句的顺序返回结果mysql:SELECT*FROMEVENTWHER
- 【动态规划】求二维矩阵的最大和子矩阵
- Linux 忘记root密码并重置root密码
- [NOIP2002]均分纸牌题解
- C#通用类型转换方法
- [编程之美]发帖“水王”问题
- 上拉刷新,下拉加载PullToRefreshLayout
- 计算机网络——万维网
- 【刷题之路】二叉树按层打印
- javascript闭包