现在有很多云服务供应商,比如AWS、阿里云,提供消息队列服务。我一直有个困惑,所以就去提问了,有几个回复很不错。

Q:
首先,大家使用消息队列的原因有很多,其中一个常见的原因是稍后处理耗时任务,比如发邮件,短信等。这个是很基本的,就不多说了。
那么,这个处理的核心是,快速把任务加入到队列里, 比如保存在 mysql 或者 redis,缩短用户的响应时间,然后快速把 response返回给用户。
所以,快速,就是关键。毕竟发送邮件需要好几百 ms,写入到 redis 也许 10ms 就够了。但现在很多云服务推出消息队列的功能,我猜测,你要调用 他们的api 的,这个 api 肯定是 http 请求啊,这个请求会很耗时吧。这样使用一个云端消息队列有何意义呢?和在 localhost 或者内网搭建消息队列相比,云服务的消息队列有什么更值得使用的理由?

网友回复摘要:

-- 阅读剩余部分 --

好几种方式:

// No. 1
mysql -u username -p < data.sql

//No. 2
mysql> CREATE DATABASE myDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;   
mysql> use myDB;                  # 使用已创建的数据库 
mysql> source /path/to/data.sql   # 导入备份数据库

感觉第......

-- 阅读剩余部分 --

部署好了,有一个专门的数据库,然后用cron来每10分钟执行一次。
crontab是这样写的:
*/10 * * * * /usr/bin/php /path/to/queue/script > /dev/null 2>&1

终于把worker部分写完了,当然了,应该再做一些处理,比如即便有很多人留言,我也可以只请求一次Server酱或者发送一次邮件,毕竟这个小脚本每5分钟运行一次。也要加一个done_at的列,好知道什么时候已经处理过了这个job

好,这里有一个重要话题:耗时。

-- 阅读剩余部分 --

使用消息队列的原因有很多,比如:

  • 耗时任务,最典型的就是发邮件和发送http请求
  • 高并发,要排队,比如写入数据库操作,比如电商里的抢购或者秒杀

消息队列,可大可小。最小的,就是写个函数,然后用cron定时执行,用mysql做介质。再大一点,就是用一些成熟的开源库,比如RabbitMQ等,分为clientserverworker。再大,就是自己写一个适合自己的队......

-- 阅读剩余部分 --