java 异步发送短信,异步怎么实现

田野_7 发布于 2016/03/02 16:15
阅读 2K+
收藏 1

java web项目,处理业务的过程中,需要发送短信,并保存短信记录;

发送短信的方法,用的HttpClient,有时发送的比较慢,短信改成异步发送,处理的业务一直往下执行;

这种怎么做?用线程?

加载中
1
xpbob
xpbob
其实可以考虑java自带的future模型,和线程差不多,但是能有返回值,告诉你他完成了,实现callable
1
FeiFeiZheng
FeiFeiZheng
可以考虑用guava 的AsyncEventBus
1
老菜鸟0217
老菜鸟0217

1,使用spring框架的异步注解 @Async ,底层应该是一个线程。

2,简单粗暴的方式:开一个线程 

 new Thread(new Runnable() {
                public void run() {
                    //发送短信    
                }
            }).start();

当然也可以高级一点,使用线程池。

3,更高端一点:使用消息队列MQ

老菜鸟0217
老菜鸟0217
补充第2条,建议使用jdk自带的缓存线程池Executors.newCachedThreadPool(),因为发短信是短期任务。
1
liuwangpan
liuwangpan
我首先想到的是用MQ  将短信业务都丢入队列中 队列服务器不停的发送短信  然后再是线程
1
iehyou
iehyou
最简单的也是最保险的 就是讲短信内容写入到表内, 起一个线程池来轮询数据库来发送
0
景愿
景愿

最简单的就是new一个Thread出来,让它自己跑去,优化一下:加入线程池,防止爆炸

比较好用的办法:业务流程中,发短信只是将短信插入表中,另一个定时任务不停的从表中拉取短信发出去。。。

0
悲欢灬离合
悲欢灬离合
加个线程最好
0
罪恶的花生
罪恶的花生
先报错库里,单独程序多线程发送,不会堵塞你的应用,还便于运维。
0
叫我刀刀
叫我刀刀

如果方便装redis,redis好了,lpush。

量太大的时候mysql有点不爽。 

0
田野_7
程序框架,没有用到spring,使用spring框架的异步注解 @Async  ,目前不行;我先试试把数据存库中,开服务多线程发送短信。谢谢各位!!!
返回顶部
顶部