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