有一个需求:
用户向MYSQL表中新增了一条数据,我需要用PHP程序及时的把这条数据读取出来,利用短信发送给特定的号码。
我该如何第一时间把这条新增的记录给读取出来?
之前使用的是服务器计划任务,每隔30S通过PHP去读取下数据库看看有无新增。但是这种方式不能达到第一时间,而且还加重了服务器负担。
有一个需求:
用户向MYSQL表中新增了一条数据,我需要用PHP程序及时的把这条数据读取出来,利用短信发送给特定的号码。
我该如何第一时间把这条新增的记录给读取出来?
之前使用的是服务器计划任务,每隔30S通过PHP去读取下数据库看看有无新增。但是这种方式不能达到第一时间,而且还加重了服务器负担。
新建MySQL触发器:
CREATE TRIGGER after_insert
AFTER INSERT
ON your_table FOR EACH ROW
BEGIN
// 这里你可以调用一个存储过程,将新数据发送到RabbitMQ
END;
RabbitMQ的消费者:
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('hello', false, false, false, false);
echo " [*] Waiting for messages. To exit press CTRL+C\n";
$callback = function ($msg) {
echo ' [x] Received ', $msg->body, "\n";
// 这里你可以处理新数据,例如发送短信
};
$channel->basic_consume('hello', '', false, true, false, false, $callback);
while ($channel->is_consuming()) {
$channel->wait();
}
$channel->close();
$connection->close();
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
打开 binlog、然后用 canal