程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-06(1)

Canal-php 客户端使用

发布于2021-03-14 06:07     阅读(1477)     评论(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黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

27 0
收藏该文
已收藏

评论内容:(最多支持255个字符)