场景: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,便于理解,详情见下一篇博文。