【java】调用微信模板消息推送,线程池优化推送速度。
来源:互联网 发布:云计算厂商 编辑:程序博客网 时间:2024/05/20 06:52
项目中用到微信小程序模板推送,原来流程如下:
1、获取当前公众号关注用户列表;
2、根据用户列表获取用户信息;
3、循环用户列表进行发送;
4、等待发送返回结果。将用户信息(昵称)、发送状态等保存到发送记录表;
存在问题:
1、每次推送都会到微信获取用户列表,并获取每个用户的昵称。接口调用频率高,发送时间较长。
推送:5000个用户,大约需要10分钟左右;
优化方案:(开启开发者功能)
1、用户关注公众号时,获取用户信息,存入用户信息表;用户取消关注也同步修改本地数据;
2、每晚定时同步公众号当前关注用户列表,防止遗漏;
3、推送模板时从本地获取公众号当前关注用户数据,直接推送这批用户。节省来回调用微信接口的时间成本;
当然,如果单纯这样优化,推送速度并没有明显提升;
再次优化:
1、推送模板消息使用线程池。我使用了java自带线程池newFixedThreadPool进行推送。设置每100毫秒推送10条,5000条数据也就1分钟推送完成。完美满足业务实时性需求。
2、线程池使用参考文档:http://cuisuqiang.iteye.com/blog/2019372
(2) newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。示例代码如下:
- package test;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- public class ThreadPoolExecutorTest {
- public static void main(String[] args) {
- ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
- for (int i = 0; i < 10; i++) {
- final int index = i;
- fixedThreadPool.execute(new Runnable() {
- public void run() {
- try {
- System.out.println(index);
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- });
- }
- }
- }
因为线程池大小为3,每个任务输出index后sleep 2秒,所以每两秒打印3个数字。
定长线程池的大小最好根据系统资源进行设置。如Runtime.getRuntime().availableProcessors()
阅读全文
0 0
- 【java】调用微信模板消息推送,线程池优化推送速度。
- java推送微信模板消息
- 微信模板消息推送
- 推送微信模板消息
- 微信消息推送 -java
- 微信公众账号推送模板消息(java版)
- 微信模板消息推送换行
- 微信公众号推送模板消息
- 微信的模板消息推送
- 微信模板消息推送接口说明
- PHP快速推送微信模板消息
- 微信公众号模板消息推送
- 微信推送模板消息测试
- 微信公众号推送模板消息
- 微信消息推送
- 微信模板推送
- Java调用极光推送推送消息
- 微信服务号推送模板信息服务器验证与模板消息推送
- 关于编译脚本在本地运行是失败的坑
- 入门赛6
- SVN怎么查看修改的历史记录并做比较
- Lua_文件I/O_012
- 考研路茫茫——空调教室【双联通分量+树形DP】
- 【java】调用微信模板消息推送,线程池优化推送速度。
- (lintcode)第28题 搜索二维矩阵
- MYSQL优化(一):【架构解析、sql语句执行详细流程】
- Linux误删除oracle_home根目录解决方案:
- Servlet/jsp之监听器
- 使用Fiddler的AutoResponder转发请求
- 生产环境下JAVA进程高CPU占用故障排查
- 【jvm】堆外内存
- 安装svn