发布于2021-03-14 06:07 阅读(1696) 评论(0) 点赞(27) 收藏(0)
工作原理
canal-php 是 Canal 的 php 客户端,它与 Canal 是采用的Socket来进行通信的,传输协议是TCP,交互协议采用的是 Google Protocol Buffer 3.0。
工作流程
1、Canal连接到mysql数据库,模拟slave
2、canal-php 与 Canal 建立连接
3、数据库发生变更写入到binlog
4、Canal向数据库发送dump请求,获取binlog并解析
5、canal-php 向 Canal 请求数据库变更
6、Canal 发送解析后的数据给canal-php
7、canal-php收到数据,消费成功,发送回执。(可选)
8、Canal记录消费位置。
构建canal php客户端
$ composer require xingwenge/canal_php or $ git clone https://github.com/xingwenge/canal-php.git $ cd canal-php $ composer update
建立与Canal的连接
try { #客户端连接方式 $client = CanalConnectorFactory::createClient(CanalClient::TYPE_SOCKET_CLUE); # $client = CanalConnectorFactory::createClient(CanalClient::TYPE_SWOOLE); $client->connect("127.0.0.1", 11111); # 对应 canal.properties的配置 $client->checkValid(); $client->subscribe("1001", "example", ".*\\..*"); #此处1001不需要修改,example 是在canal配置文件里配置的名称 # $client->subscribe("1001", "example", "db_name.tb_name"); # 设置过滤,多个数据库用逗号隔开
# $client->subscribe("1001", "example", "db_name.tb_name_[0-9]"); # 可以批量设置分表表名 while (true) { $message = $client->get(100); if ($entries = $message->getEntries()) { foreach ($entries as $entry) { #此处可以处理逻辑 Fmt::println($entry); # 返回的是一条SQL语句受影响的所有数据行 } } sleep(1); } $client->disConnect(); } catch (\Exception $e) { echo $e->getMessage(), PHP_EOL; }
运行
php canal-php/src/sample/client.php
作者:phpNumOne
链接:http://www.phpheidong.com/blog/article/3233/6123f578342c5786a2f9/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!