CanalLauncher启动类
2024-01-24 09:30:35 3 举报
AI智能生成
为你推荐
查看更多
CanalLauncher启动类是用于启动Canal服务的重要组件。它通过读取配置文件并初始化相应的组件,完成Canal服务的启动。
作者其他创作
大纲/内容
默认classpath:canal.properties
或者指定canal.conf
加载canal.properties
与本地配置合并
读取远端canalConfig
创建configClient
如果配置Admin服务
客户端与服务端的配置md5进行比较,如果一致则不需要传输数据
默认canal.auto.scan.interval=5
定时拉取配置,变化则重启canal server
创建canalMQProducer
加载mq 通用配置
canal.mq.build.thread.size = 8
队列大小size*2
拒绝策略CallerRunsPolicy
buildExecutor
canal.mq.send.thread.size=30
sendExecutor
super.init
加载RocketMQ配置
设置生产者的参数
defaultMQProducer.start()
sendPartitionExecutor
canalMQProducer.init
canal.serverMode = rocketMQ
使用延迟缓存设计,key不存在时,创建PlainCanalConfigClient
定义instanceGenerator
initGlobalConfig
读取配置 canal.destinations =
非懒加载 initInstanceConfig
暴露指标端口
embededCanalServer.setCanalInstanceGenerator(instanceGenerator)
创建embededCanalServer
设置定时的间隔、监控的方法等
key不存在时,创建ManagerInstanceConfigMonitor
声明 instanceConfigMonitors 延迟缓存Map
canal.auto.scan = true
创建CanalController实例
启动指标服务,默认 PrometheusProvider
key不存在时,使用canalInstanceGenerator创建CanalInstance
声明 canalInstances,延迟加载Map
优先启动 embededCanalServer.start()
如果这个配置有值: canal.destinations
启动非懒加载的instanceConfigs
启动canal实例
一开始会启动canalInstance,如果后续配置变化会重启/停止
查询服务端canal_instance_config列表
定时扫描
启动监控
绑定端口启动Netty
构造Netty通信
canalServer.start();
JVM退出前能够进行适当的清理和资源释放
addShutdownHook
canalMQStarter.start
延迟了实例的创建,直到这个实例真正需要使用时才创建,节省了资源。
这个类在外部类 CanalAdminWithNetty 被加载时不会被加载,只有在调用 instance() 方法时才会被加载和初始化 CANAL_ADMIN_WITH_NETTY 实例
JVM在加载类的过程中,会保证静态内部类的初始化是线程安全的。
单例模式确保了全局只有一个Admin服务在运行,防止了资源冲突和状态不一致的问题
CanalAdminWithNetty.instance()
canalAdminWithNetty.start()
启动canal admin
controller.start()
canalStater.start()
runningLatch.await()
executor.shutdownNow();
CanalLauncher启动类
0 条评论
回复 删除
下一页