mysql decimal 转string_利用MySQL的Binlog实现数据同步与订阅(下)

本文详细介绍了如何利用MySQL的Binlog实现数据同步与订阅。通过Python-Mysql-Replication读取并解析Binlog,发布到自建的基于RabbitMQ的EventBus,再通过EventHandler订阅和处理Binlog事件。该方法适用于系统内的领域事件驱动,如订单创建通知,或第三方数据异步处理,提高系统接口吞吐性能。
摘要由CSDN通过智能技术生成
利用MySQL的Binlog实现数据同步与订阅(下)​blog.yuanpei.me
a7a46b42491ef902d938f43dca755162.png

终于到这个系列的最后一篇,在前两篇博客中,我们分别了介绍了Binlog的概念和事件总线(EventBus)的实现,在完成前面这将近好几千字的铺垫以后,我们终于可以进入正题,即通过EventBus发布Binlog,再通过编写对应的EventHandler来订阅这些Binlog,这样就实现了我们“最初的梦想”。坦白说,这个过程实在有一点漫长,庆幸的是,它终于还是来了。

Binlog读取与解析

首先,我们通过 Python-Mysql-Replication 这个项目来读取Binlog,直接通过pip install mysql-replication安装即可。接下来,我们编写一个简单的脚本文件:

def readBinLog():
    stream = BinLogStreamReader(
        # 填写IP、账号、密码即可
        connection_settings = {
    
            'host': '',
            'port': 3306, 
            'user': '', 
            'passwd': ''
        },
        # 每台服务器唯一
        server_id = 3, 
        # 主库Binlog读写完毕时是否阻塞连接
        blocking = True, 
        # 筛选指定的表
        only_tables = ['order_info', 'log_info'], 
        # 筛选指定的事件
        only_events = [DeleteRowsEvent, WriteRowsEvent, UpdateRowsEvent]) 

    for binlogevent in stream:
        for row in binlogevent.rows:
            event = {
    
                "schema": binlogevent.schema,
                "table": binlogevent.table,
                "log_pos": binlogevent.packet.log_pos
            }
            if isinstance(binlogevent, DeleteRowsEvent):
                event["action"] = "delete"
                event["origin"] = dict(row["values"].items())
                event["current"] = None
                event = dict(event.items())
            e
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值