rabbitMq实现与zookeeper类似的watcher功能
场景: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,便于理解,详情见下一篇博文。
rabbitMq实现与zookeeper类似的watcher功能的更多相关文章
- Zookeeper学习之Watcher事件类型和ZK状态
1.Zookeepe Watcherr的事件类型和ZK状态. zookeeper:Watcher.ZK状态,事件类型(一)zookeeper有watch事件,是一次性触发的,当watch监视的数据发 ...
- ZooKeeper类说明
ZooKeeper 类是ZooKeeper 客户端库的主要类.要使用ZooKeeper服务,应用程序必须首先实例化ZooKeeper类的对象.所有的迭代都将通过调用ZooKeeper类的方法来完成.除 ...
- 从观察者设计模式的角度理解Zookeeper中的Watcher
前面关于Zookeeper提供的API中,可以观察到大部分接口参数似乎都是用了Wathcerz这个接口.这个在观察者模式中略有涉及,本文重点分析从观察者模式的角度分析该接口. 首先上该接口的UML图: ...
- java11-6 String类的其它功能
String类的其他功能: 替换功能: String replace(char old,char new) String replace(String old,String new) 去除字符串两空格 ...
- java11-3 String类的获取功能
String类的获取功能 int length():获取字符串的长度. char charAt(int index):获取指定索引位置的字符 int indexOf(int ch):返回指定字符在此字 ...
- protel DXP的类矢量图功能
一.概述 在写论文的过程中,我们经常需要将protel DXP上的原理图贴入到WORD中.我们可以选择使用截图工具,然后再导入到WORD中.但是由于普通截图图形文件都是位图文件,当我们将图形文件导入W ...
- Java基础知识强化34:String类之String类的转换功能
1. String类的转换功能 String[] split(String regex)//将字符串变成字符串数组(字符串切割) byte[] getBytes()//将字符串变成字节数组 char[ ...
- Java基础知识强化33:String类之String类的获取功能
1. String类的获取功能 int length() // 获取字符串中字符的个数(长度) char charAt(int index)//根据位置获取字符 int indexOf(int ch) ...
- Java基础知识强化32:String类之String类的判断功能
1. String类的判断功能: boolean equals (Object obj ) boolean equalsIgnoreCase (String str ) boolean contain ...
随机推荐
- C# show和showdialog区别
简单地说他们的区别就是show弹出来的窗体和父窗体(上一个窗体的简称)是属于同一等级的,这两个窗体可以同时存在而且可以随意切换,但是showdialog弹出来的窗体就不能这样,他永远是被置顶的,如果不 ...
- UGUI 文字效果实现(Shadow\Gradient\Outline)
NGUI直接在UILabel组件中接入了Shadow.Gradient和outline选项,但在UGUI中是通过另外的组件单独提供,比如outline.shader等.这篇文章主要记录这几个文字效果实 ...
- Java输出打印工具类封装
在进行Java打印输出,进行查看字段值的时候,觉得每次写了System.out.println之后,正式发布的时候,还得一个个的删掉,太麻烦了,经过别人的指教,做了一个Java的打印输出封装类,只为记 ...
- Appium 实战练习一
# -*- coding:utf-8 -*- ''' Created on Sep 30, 2018 @author: SaShuangYiBing Comment: ''' import time ...
- Find a way
Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year ...
- Django 使用mysql 数据库流程
创建一个mysql数据库 在settings中配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': ...
- 1407: [Noi2002]Savage
其实答案远不到1e6 所以可以枚举! 设答案是m 那\(i,j\)的相遇就可以表示成\(P_ix+C_i=P_jx+C_j+ym\) 移向就是\((P_i-P_j)x-ym=C_j-C_i\) 套扩展 ...
- Kubernetes中的Taint污点和Toleration容忍
Taint(污点)和 Toleration(容忍)可以作用于 node 和 pod master 上添加taint kubectl taint nodes master1 node-role.kube ...
- Oracle 11g中的snapshot standby特性
在Oracle 11g中,data guard最吸引人的,除了active data guard的实时查询特性(即可以以只读方式打开物理standby数据库的同时MRP进程能继续做recover),快 ...
- Dubbo -- 系统学习 笔记 -- 快速启动
Dubbo -- 系统学习 笔记 -- 目录 快速启动 服务提供者 服务消费者 快速启动 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubb ...