Canal 微服务项目搭建
Posted 杨 戬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Canal 微服务项目搭建相关的知识,希望对你有一定的参考价值。
文章目录
项目介绍
许多高并发业务中,我们都需要搭建一个微服务,用于读取canal监听到的变更日志,微服务名字叫xxx-canal。
项目参考地址:https://github.com/NormanGyllenhaal/canal-client
项目搭建
拿秒杀系统为例子,我们搭建seckill-canal微服务
该微服务项目我们需要引入canal-spring-boot-autoconfigure包,并且需要实现EntryHandler<T>
接口,该接口中有3个方法,分别为insert、update、delete,这三个方法用于监听数据增删改变化。
1. 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>seckill-service</artifactId>
<groupId>com.seckill</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>seckill-canal</artifactId>
<dependencies>
<!--web-->
<dependency>
<groupId>com.seckill</groupId>
<artifactId>seckill-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--esAPI-->
<dependency>
<groupId>com.seckill</groupId>
<artifactId>seckill-search-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--goodsAPI-->
<dependency>
<groupId>com.seckill</groupId>
<artifactId>seckill-goods-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--canal-->
<dependency>
<groupId>top.javatool</groupId>
<artifactId>canal-spring-boot-autoconfigure</artifactId>
<version>1.2.1-RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 指定该Main Class为全局的唯一入口 -->
<mainClass>com.seckill.CanalApplication</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
2. bootstrap.yml配置
我们需要添加canal的配置:
#Canal配置
canal:
server: canal-server:11111
destination: example
完整yaml如下:
server:
port: 18088
spring:
application:
name: seckill-canal
cloud:
nacos:
config:
file-extension: yaml
server-addr: nacos-server:8848
discovery:
#Nacos的注册地址
server-addr: nacos-server:8848
#超时配置
ribbon:
ReadTimeout: 3000000
#Canal配置
canal:
server: canal-server:11111
destination: example
#日志
logging:
level:
root: error
3. 实现EntryHandler接口
创建com.seckill.handler.SkuHandler实现EntryHandler接口,@CanalTable
注解会关联相应的数据表,代码如下:
package com.seckill.canal;
import com.alibaba.fastjson.JSON;
import com.seckill.goods.pojo.Sku;
import com.seckill.page.feign.SkuPageFeign;
import com.seckill.search.feign.SkuInfoFeign;
import com.seckill.search.pojo.SkuInfo;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import top.javatool.canal.client.annotation.CanalTable;
import top.javatool.canal.client.handler.EntryHandler;
@Component
@CanalTable(value = "tb_sku")
public class SkuHandler implements EntryHandler<Sku>
/***
* 增加数据
* @param sku
*/
@Override
public void insert(Sku sku)
System.out.println("===========insert:"+sku);
/***
* 修改数据
* @param before
* @param after
*/
@Override
public void update(Sku before, Sku after)
System.out.println("===========update-before:"+before);
System.out.println("===========update-after:"+after);
/***
* 删除数据
* @param sku
*/
@Override
public void delete(Sku sku)
System.out.println("===========delete:"+sku);
4. 创建启动类
@SpringBootApplication
public class CanalApplication
public static void main(String[] args)
SpringApplication.run(CanalApplication.class,args);
程序启动后,修改tb_sku数据,可以看到控制会打印修改前后的数据:
以上是关于Canal 微服务项目搭建的主要内容,如果未能解决你的问题,请参考以下文章