SpringCloud商城day06 数据同步解决方案-2021-10-11

一.基于Canal, 开发数据监控微服务

1. Canal: 阿里开源, java开发, 监控数据库 -> 双机房数据同步

   (1) 工作原理: canal -> 伪装成mysql备份机 -> mysql数据改变 -> 数据写入 binary log -> 日志发送到Canal -> canal提取mysql更新数据

   (2) Canal 环境部署 - LINUX虚拟机:

1) mysql开启binlog模式, 值ON已开启, OFF未开启
    SHOW VARIABLES LIKE '%log_bin%'
    
2) 修改 /etc/my.cnf 开启binlog模式
    [mysql]
    log-bin=mysql-bin
    binlog-format=ROW
    server_id=1

3) 重启mysql: mysql -h localhost -u root -p

4) 使用root账号 -> 创建用户 -> 授予权限
    create user canal@'%' IDENTIFIED by 'canal';
    GRANT SELECT, REPLICATION SLAVE, REPLICATION, SUPER ON *.* TO 'canal'@'%';
    FLUSH PRIVILEGES;

5) canal服务端安装:
    a. 下载地址: https://github.com/alibaba/canal/releases/tag/canal-1.0.24
    b. 上传到linux系统, 解压到目录 /usr/local/canal
    c. 修改exmaple下的实例配置: 
       #position info
       canal.instance.master.address=192.168.200.128:3306
       #username/password
       canal.instance.dbusername=canal
       canal.instance.dbpassword=canal
    
       #注释掉这个参数, 开启扫描全库
       #canal.instance.defaultDatabaseName=

6) 启动服务: [root@localhost canal]# ./bin/startup.sh

7) 查看日志: cat /usr/local/canal/logs/canal/canal.log

   (3) 整合Canal+springboot源码包 -> 添加到maven仓库

1) 下载canal整合包spring-boot-start-canal:
    https://github.com/chengqian56131/spring-starter-canal

2) 解压进入starter-canal: cmd

3) cd spring-boot-starter-canal-master/starter-canal

4) mvn指令: mvn clean install -DskipTest

5) 进入本地仓库 -> 搜索xpand -> 已安装在目录 repository/com

2. 数据监控微服务 changgou_canal:

(1) 添加依赖: start-canal / spring-rabbit

(2) 启动类CanalApplication: 
    @EnableCanalClient   //声明是canal的客户端
    @SpringBootApplication 

(3) 配置application.properties:  
    canal.client.instances.example.host=192.168.200.128  //连接主机
    canal.client.instances.example.port=11111
    canal.client.instances.example.batchSize=1000  //批大小,每次数据库交互处理1000条数据
    spring.rabbitmq.host=192.168.200.128  //连接rabbitmq

(4) 测试监听类 -> com.changgou.canal.listener.BusinessListener

    @CanalEventListener  //声明当前类是canal监听类
    public class BusinessListener{

    @ListenPoint(schema="changgou_business", table="tb_ad")//监听方法注解, 监听的库名和表名
    public void addUpdate(CanalEntry.EventType e, CanalEntry.RowData r)  //监听方法
        //eventType: 当前操作数据库的类型
        //rowData :  当前操作数据库的数据
        
        rowData.getBeforeColumnslist();  //改变前的数据
        rowData.getAfterColumnsList();   //改变后的数据

二. 基于Canal, 更新首页广告缓存

1. 需求: 广告表tb_ad数据改变 -> canal获取binlog数据 -> changgou_canal微服务获取字段"position" -> 发送消息到rabbitmq -> 运营微服务获取消息"position" -> 调用nginx中的ad_update.lua脚本 -> 更新缓存

2. 第一部分代码: tb_ad数据改变 -> canal监控 -> 发送到mq 

(1) canal微服务->添加 config包

你可能感兴趣的:(项目复习笔记,elasticsearch)