python - MySQL 触发器到 RabbitMQ

标签 python mysql triggers rabbitmq

我正在寻找一种将 SQL 记录传输到 RabbitMQ 的方法。

我需要的是,每当有新记录插入到表中时,我想将该记录(作为 JSON 或任何其他格式)传输到 RabbitMQ。

我阅读了有关使用 sys_exec()(如 Python 或 Java)执行外部脚本的信息,但我想知道应该如何完成以及这是否是最佳方式。

最佳答案

ssimicro/lib_mysqludf_amqp: Publish messages via AMQP directly from MySQL似乎符合要求。

然后你就可以做到这一点(从 README 中剪切和粘贴):

SET @AMQP_URL = 'amqp://guest:guest@localhost:5672';
SET @AMQP_EXCHANGE = 'udf';

DROP TABLE IF EXISTS `accounts`;
CREATE TABLE `accounts` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `username` varchar(64) NOT NULL,
     PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='Customer Accounts';

DELIMITER ;;

DROP TRIGGER IF EXISTS `after_insert_on_accounts`;
CREATE DEFINER=`root`@`localhost` TRIGGER `after_insert_on_accounts` AFTER INSERT ON `accounts` FOR EACH ROW BEGIN
    SET @message_id = (SELECT lib_mysqludf_amqp_sendjson(@AMQP_URL, @AMQP_EXCHANGE, 'accounts.insert', json_object('id', NEW.id, 'username', NEW.username)));
END ;;

DROP TRIGGER IF EXISTS `after_update_on_accounts`;
CREATE DEFINER=`root`@`localhost` TRIGGER `after_update_on_accounts` AFTER UPDATE ON `accounts` FOR EACH ROW BEGIN
    SET @message_id = (SELECT lib_mysqludf_amqp_sendjson(@AMQP_URL, @AMQP_EXCHANGE, 'accounts.update', json_object('id', NEW.id, 'username', NEW.username)));
END ;;

DROP TRIGGER IF EXISTS `after_delete_on_accounts`;
CREATE DEFINER=`root`@`localhost` TRIGGER `after_delete_on_accounts` AFTER DELETE ON `accounts` FOR EACH ROW BEGIN
    SET @message_id = (SELECT lib_mysqludf_amqp_sendjson(@AMQP_URL, @AMQP_EXCHANGE, 'accounts.delete', json_object('id', OLD.id, 'username', OLD.username)));
END ;;

DELIMITER ;

INSERT INTO accounts (username) values ('jdoe');
UPDATE accounts SET username = 'jsmith';
DELETE FROM accounts WHERE id = last_insert_id();

不过我怀疑,它会打开一个到 RabbitMQ 的新连接并为每条消息登录,这可能会产生糟糕的性能。但我不确定。

关于python - MySQL 触发器到 RabbitMQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26696844/

相关文章:

c# - 使用 MySQL 和 EntityFramework 的 DbGeography

插入触发器后的 MySQL - MyISAM 与 InnoDB

具有两个字符串的 Python 函数 - 子字谜

mysql - 如何将 MySQL 转储从主机恢复到 Docker 容器

mysql - 在VB MySQL编程中动态提供列名

mysql - 锁定通过触发器操作的表的后果?

MySQL 列更新与触发器

python django-tastypie 对象创建未正确返回数据

python - 如何生成扁平列表列表的所有排列?

python - 使用 supervisord 管理 docker 容器的最佳方法