• eventStore (数据存储)

  • metaManager (增量订阅&消费信息管理器)

这些组件我暂时不打算深入去研究,因为在目前这个阶段我自己也不清楚,但这个是我后续需要学习研究的重点。

3、在 IntelliJ IDEA 中运行 Canal Demo


在 Linux 环境中安装 canal 比较简单,大家可以安装官方手册一步一步操作即可,在这里我就不重复介绍,本节主要的目的是希望在开发工具中运行 Canal 的 Demo,以便后续在研究源码的过程中遇到难题时可以进行 Debug。

温馨提示:大家在学习过程中,可以根据官方文档先安装一遍 canal,对理解 Canal 的核心组件有着非常重要的帮助。

首先先从 canal 源码中寻找官方提供的 Demo,其示例代码在 example 包中,如下图所示:

在这里插入图片描述

但是另外稍微遗憾的是 canal 提供提供的示例代码中只包含了 client 端相关的代码,并没有包含服务端(server),故我们将目光放到其单元测试中,如下图所示:

在这里插入图片描述

接下来我根据官方的一些提示,结合自己的理解,编写出如下测试代码,在 IDEA 开发工具中实现运行 Canal 相关的 Demo。下面的代码已通过测试,可直接使用。

1、Canal Server Demo

package com.alibaba.otter.canal.server;

import com.alibaba.otter.canal.instance.core.CanalInstance;

import com.alibaba.otter.canal.instance.core.CanalInstanceGenerator;

import com.alibaba.otter.canal.instance.manager.CanalInstanceWithManager;

import com.alibaba.otter.canal.instance.manager.model.Canal;

import com.alibaba.otter.canal.instance.manager.model.CanalParameter;

import com.alibaba.otter.canal.server.embedded.CanalServerWithEmbedded;

import com.alibaba.otter.canal.server.netty.CanalServerWithNetty;

import java.net.InetSocketAddress;

import java.nio.ByteBuffer;

import java.util.Arrays;

public class CanalServerTestMain {

protected static final String ZK_CLUSTER_ADDRESS = “127.0.0.1:2181”;

protected static final String DESTINATION = “example”;

protected static final String DETECTING_SQL = “select 1”;

protected static final String MYSQL_ADDRESS = “127.0.0.1”;

protected static final String USERNAME = “canal”;

protected static final String PASSWORD = “canal”;

protected static final String FILTER = “.\\\\\…\”;

/** 默认 500s 后关闭 */

protected static final long RUN_TIME = 120 * 1000;

private final ByteBuffer header = ByteBuffer.allocate(4);

private CanalServerWithNetty nettyServer;

public static void main(String[] args) {

CanalServerTestMain test = new CanalServerTestMain();

try {

test.setUp();

System.out.println(“start”);

} catch (Throwable e) {

e.printStackTrace();

} finally {

System.out.println(“sleep”);

try {

Thread.sleep(RUN_TIME);

} catch (Throwable ee) {

}

test.tearDown();

System.out.println(“end”);

}

}

public void setUp() {

CanalServerWithEmbedded embeddedServer = new CanalServerWithEmbedded();

embeddedServer.setCanalInstanceGenerator(new CanalInstanceGenerator() {

public CanalInstance generate(String destination) {

Canal canal = buildCanal();

return new CanalInstanceWithManager(canal, FILTER);

}

});

nettyServer = CanalServerWithNetty.instance();

nettyServer.setEmbeddedServer(embeddedServer);

nettyServer.setPort(11111);

nettyServer.start();

// 启动 instance

embeddedServer.start(“example”);

}

public void tearDown() {

nettyServer.stop();

}

private Canal buildCanal() {

Canal canal = new Canal();

canal.setId(1L);

canal.setName(DESTINATION);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

由于篇幅原因,就不多做展示了

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

d4c3ab8389e65ecb71ac0)

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

GitHub 加速计划 / ca / canal
43
10
下载
alibaba/canal: Canal 是由阿里巴巴开源的分布式数据库同步系统,主要用于实现MySQL数据库的日志解析和实时增量数据订阅与消费,广泛应用于数据库变更消息的捕获、数据迁移、缓存更新等场景。
最近提交(Master分支:19 天前 )
af937544 - 1 个月前
9f2fc740 - 1 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐