場景:A、B、C、D(可以是一個機器的不同進程,也可以是不同機器的進程)啟動了相同的項目,使用同一個數據庫。但是,如果A修改了數據庫的數據,需要B、C、D在很短的時間能夠知道數據庫發生了修改。當然可以在A、B、C、D上各啟動一個線程對數據庫進行監視,但是,這樣會消耗數據庫資源,不推薦采用這種方式。
解決方法:
1、使用ZK的watcher進行監視,此處不詳解。
2、使用rabbitMq的廣播模式進行監視。
3、其他消息發布訂閱框架
rabbitMq的廣播模式
1、建立連接工廠
2、生成隊列
3、生成廣播類型的交換機
4、綁定隊列與交換機
5、建立生產者進行消息發送
6、建立消費者對消息進行消費
理解:
rabbitMq在廣播模式下,可以將消息發送給所有與廣播交換機綁定的隊列(人手一份,相同的消息);
注意:此處的“人手一份”是指所有與交換機綁定的不同隊列,如果B、C、D使用的是同一個隊列,那么只能有一個會收到消息;
因此,如果A、B、C、D使用的是同一個程序(例如web服務部署在不同的節點或者端口上),那么為了保證它們監視的隊列不同,就需要在生成隊列時加入唯一標識符(推薦UUID)
ps:代碼就不貼了,網上有許多類似的代碼。最后還是寫了一個demo,便於理解,詳情見下一篇博文。