監(jiān)聽(tīng)Mysql Binlog

代碼見(jiàn):https://github.com/giafei/mysql-binlog-watcher

這個(gè)組件基于一個(gè)很現(xiàn)實(shí)的需求,系統(tǒng)隨著業(yè)務(wù)發(fā)展而擴(kuò)張時(shí),總會(huì)碰到新業(yè)務(wù)需要整合老業(yè)務(wù)數(shù)據(jù)的現(xiàn)象,一般的微服務(wù)會(huì)實(shí)現(xiàn)為新業(yè)務(wù)系統(tǒng)從老業(yè)務(wù)系統(tǒng)獲取數(shù)據(jù)。這里提供一種基于Mysql Binlog的思路,新業(yè)務(wù)系統(tǒng)可以通過(guò)監(jiān)聽(tīng)老業(yè)務(wù)系統(tǒng)的數(shù)據(jù)變化,這樣在不改變老業(yè)務(wù)系統(tǒng)代碼的前提下,新業(yè)務(wù)系統(tǒng)可以獲取到老業(yè)務(wù)系統(tǒng)數(shù)據(jù)變化的通知,及時(shí)更新自己的Redis或其他緩存。
也可以用于在同一個(gè)系統(tǒng)中,跨表整合數(shù)據(jù)。
我自己實(shí)現(xiàn)這個(gè)組件是為了跨微服務(wù)整合數(shù)據(jù)到Elastic Search。


組件使用起來(lái)比較簡(jiǎn)單,需要一個(gè)前提就是Mysql開(kāi)啟binlog且binlog格式為ROW,格式見(jiàn)https://zhuanlan.zhihu.com/p/26977878

1. 配置文件

binlog:
  mysql:
    hosts: #配置數(shù)據(jù)庫(kù)的連接信息
      - name: test-db
        host: localhost
        port: 3306
        username: root
        password: root
        timeOffset: 28800000 #時(shí)區(qū)偏移 單位:毫秒
      - name: test-db2
        host: localhost
        port: 3306
        username: root
        password: root
        timeOffset: 28800000

2. bean掃描

@SpringBootApplication(scanBasePackages = {"net.giafei"})
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

3.監(jiān)聽(tīng)

//hostName 即為配置文件中的name 
//MysqlWatcher注解繼承有Component注解,所以會(huì)被Spring創(chuàng)建為Bean
@MysqlWatcher(hostName = "test-db", database = "test_binlog", table = "test_table1")
public class TestTable1Watcher implements IMysqlDataListener<TestTable1> {
    private Logger logger = LoggerFactory.getLogger(TestTable1Watcher.class);

    @Override
    public void onUpdate(TestTable1 from, TestTable1 to) {
        logger.info("ID 為 {} 的條目數(shù)據(jù)變更", from.getId());
        logger.info("\t變化前:" + JSON.toJSONString(from, SerializerFeature.WriteDateUseDateFormat));
        logger.info("\t變化后:" + JSON.toJSONString(to, SerializerFeature.WriteDateUseDateFormat));
    }

    @Override
    public void onInsert(TestTable1 data) {
        logger.info("插入ID為 {} 的數(shù)據(jù)", data.getId());
    }

    @Override
    public void onDelete(TestTable1 data) {
        logger.info("ID 為 {} 的數(shù)據(jù)被刪除", data.getId());
    }
}

binlog解析通過(guò)組件mysql-binlog-connector-java,數(shù)據(jù)到Entity通過(guò)fastjson,其他部分比較簡(jiǎn)單就不再贅述了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、微服務(wù)介紹 1. 什么是微服務(wù) 在介紹微服務(wù)時(shí),首先得先理解什么是微服務(wù),顧名思義,微服務(wù)得從兩個(gè)方面去理解,...
    阿南的生活記錄閱讀 471評(píng)論 0 3
  • 微服務(wù)實(shí)施需要明確每一步怎么做,可能存在的問(wèn)題和解決思路、方法。如果能有相應(yīng)的經(jīng)驗(yàn)和理論指導(dǎo),將會(huì)大大有助于我們?cè)O(shè)...
    java菜閱讀 2,385評(píng)論 0 3
  • 轉(zhuǎn)載:https://www.cnblogs.com/along21/p/8005775.html 轉(zhuǎn)載:Mysq...
    SkTj閱讀 2,893評(píng)論 0 16
  • 今天看到一位朋友寫(xiě)的mysql筆記總結(jié),覺(jué)得寫(xiě)的很詳細(xì)很用心,這里轉(zhuǎn)載一下,供大家參考下,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,840評(píng)論 0 30
  • 中國(guó)有句老話,叫做“禮尚往來(lái)”,還有句相近的老話,叫做“投桃報(bào)李”,所以,古往今來(lái),禮就像衡量一個(gè)人品格的標(biāo)簽,被...
    蘇曉懶閱讀 449評(píng)論 0 0

友情鏈接更多精彩內(nèi)容