Cách tốt nhất để đạt được điều này là sử dụng trigger và cron. Tạo bảng 'hàng đợi thông báo' và điền bảng đó bằng trình kích hoạt khi một hàng được chèn vào bảng mong muốn.
ví dụ:
CREATE TABLE `notification_queue` (
`notification_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`sent` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`notification_id`)
);
Sau đó, xác định một trình kích hoạt đơn giản:
DELIMITER $$
CREATE TRIGGER t_notification_insert
AFTER INSERT ON [table_being_inserted]
FOR EACH ROW
BEGIN
INSERT INTO `notification_queue` (`sent`) VALUES (0);
END$$
DELIMITER ;
Từ thời điểm đó, tất cả những gì bạn cần làm là chạy crontab trên máy chủ (giả sử mỗi phút) được chọn từ notification
bảng mà sent = 0
, gửi thông báo và đặt sent = 1
Theo như tôi biết, đó là cách tốt nhất để lấy thông tin đó ra khỏi DB mà không cần đọc nhật ký thùng.
Nếu bạn cần một ví dụ về tập lệnh để chạy với cron:
#!/bin/bash
DB_USER=''
DB_PASS=''
DB_NAME=''
ID=`mysql -u$DB_USER -p$DB_PASS $DB_NAME -Bse "SELECT notification_id FROM notification_queue WHERE sent=0 LIMIT 1;"`
if [[ ! -z $ID ]]
then
# SEND MAIL HERE
RESULT=`mysql -u$DB_USER -p$DB_PASS $DB_NAME -Bse "UPDATE notification_queue SET sent=1 WHERE notification_id = $ID;"`
echo "Sent"
fi