場景:A、B、C、D(能夠是一個機器的不一樣進程,也能夠是不一樣機器的進程)啓動了相同的項目,使用同一個數據庫。可是,若是A修改了數據庫的數據,須要B、C、D在很短的時間可以知道數據庫發生了修改。固然能夠在A、B、C、D上各啓動一個線程對數據庫進行監視,可是,這樣會消耗數據庫資源,不推薦採用這種方式。web
解決方法:數據庫
一、使用ZK的watcher進行監視,此處不詳解。框架
二、使用rabbitMq的廣播模式進行監視。線程
三、其餘消息發佈訂閱框架隊列
rabbitMq的廣播模式進程
一、創建鏈接工廠資源
二、生成隊列部署
三、生成廣播類型的交換機it
四、綁定隊列與交換機程序
五、創建生產者進行消息發送
六、創建消費者對消息進行消費
理解:
rabbitMq在廣播模式下,能夠將消息發送給全部與廣播交換機綁定的隊列(人手一份,相同的消息);
注意:此處的「人手一份」是指全部與交換機綁定的不一樣隊列,若是B、C、D使用的是同一個隊列,那麼只能有一個會收到消息;
所以,若是A、B、C、D使用的是同一個程序(例如web服務部署在不一樣的節點或者端口上),那麼爲了保證它們監視的隊列不一樣,就須要在生成隊列時加入惟一標識符(推薦UUID)
ps:代碼就不貼了,網上有許多相似的代碼。最後仍是寫了一個demo,便於理解,詳情見下一篇博文。