携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情
每日英语:
It's okay to be scared,we just have to do it anyway.
翻译:害怕也不要紧,我们只需要勇往直前。 -《小谢尔顿》
1.Canal安装
1.1 在MySQL中对canal授权
授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant:
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
1.2 采用docker方式安装canal
我们采用docker安装方式:
docker run -p 11111:11111 --name canal -d docker.io/canal/canal-server
安装成功后,用命令进行查看
docker images
进入到安装好的canal容器中
docker exec -it canal /bin/bash
cd到指定路径下进行文件修改
cd canal-server/conf/
ls 可以看到要修改的canal.properties,canal.properties 是canal自身的配置,在canal.ip = ,下面增加
canal.id = 123
添加完后,进行保存退出
接下来对instance.properties 进行配置,instance.properties是需要同步数据的数据库连接配置
cd example/
ls下,可以看到要修改的instance.properties
修改配置如下:
# position info,你本机服务mysql的配置
canal.instance.master.address=192.xx.xx.xx:3306
另一处配置:
# table regex
#canal.instance.filter.regex=.*\..*
#监听配置
canal.instance.filter.regex=shop_goods.ad_items
配置完成后,重启canal容器
docker restart canal
2.多级缓存架构缓存一致性实战
2.1 Canal微服务搭建
工程坐标:
<groupId>com.xz.mall</groupId>
<version>0.0.1-SNAPSHOT</version>
<artifactId>mall-canal-service</artifactId>
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>mall-service</artifactId>
<groupId>com.xz</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mall-canal-service</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--springboot-canal快速构建依赖包-->
<dependency>
<groupId>top.javatool</groupId>
<artifactId>canal-spring-boot-starter</artifactId>
<version>1.2.1-RELEASE</version>
</dependency>
<dependency>
<groupId>com.xz</groupId>
<artifactId>mall-goods-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
bootstrap.yml:
server:
port: 8083
spring:
application:
name: mall-canal
cloud:
nacos:
config:
file-extension: yaml
server-addr: xx.xx.xx.xx:8848
discovery:
#Nacos的注册地址
server-addr: xx.xx.xx.xx:8848
#Canal配置
canal:
server: xx.xx.xx.xx:11111
destination: example
#日志配置
logging:
pattern:
console: "%msg%n"
level:
root: error
创建监听类com.xz.mall.canal.listener.AdItemsHandler,代码如下:
@Component
@CanalTable(value = "ad_items")
public class AdItemsHandler implements EntryHandler<AdItems> {
@Autowired
private SkuFeign skuFeign;
/**
* 数据库增加数据,执行该方法
* @param adItems
*/
@Override
public void insert(AdItems adItems) {
skuFeign.updateTypeItems(adItems.getType());
}
/**
* 数据库修改数据,执行该方法
* @param before
* @param after
*/
@Override
public void update(AdItems before, AdItems after) {
if (before.getType().intValue() != after.getType().intValue()) {
//重新加载变更前分类的ID对应的推广产品
skuFeign.updateTypeItems(before.getType());
}
//重新加载缓存
skuFeign.updateTypeItems(after.getType());
}
/**
* 数据库删除数据,执行该方法
* @param adItems
*/
@Override
public void delete(AdItems adItems) {
skuFeign.delTypeItems(adItems.getType());
}
}
创建启动类com.xz.mall.canal.MallCanalApplication,代码如下:
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableFeignClients(basePackages = "com.xz.mall.goods.feign")
public class MallCanalApplication {
public static void main(String[] args) {
SpringApplication.run(MallCanalApplication.class, args);
}
}
可以通过修改数据中shop_goods库中,ad_items 表的数据,增加,修改,删除都可以。进行相应的测试。
总结:本篇主要介绍了一下Canal的安装,还有Canal微服务的初步搭建。