消息系统:点对点&发布订阅?

简介: 消息系统:点对点&发布订阅?

消息系统,是系统中负责消息从一个应用传递到另外一个应用,对于应用本身而言,就不需要去关心消息数据的传递过程,只需要关系数据本身即可。


在分布式消息系统中异步的进行消息的传递,存在两种典型模式,那就是点对点消息系统和发布订阅消息系统。


下面我们就来看一下这两种模式各自的特点吧。


点对点消息系统


先不多说,先画图,看的真切。

image.png


如图则是点对点消息系统的一种经典图例,消息传出方将消息数据发送给消息队列,然后由消费者,也就是消息接收方去进行消费;但是这里会存在一个消息只能被消费一次,当一个消息数据被消费后,这个消息数据会在消息队列中消失。


这也是点对点消息系统的特点,因为每个消息数据只能被消费使用一次,所以就避免了重复消费的问题。


发布订阅消息系统


图示如下。


image.png

发布订阅消息系统是大部分分布式企业级系统的优选方案。


发布者将消息数据持久化到数据队列中,准确的说这里不是数据队列了,是Topic,然后由多个订阅者去消费,每个消息数据可以被多个订阅者进行消费。


数据被消费后,不会被topic删除,而且发送到topic中的消息数据可以被所有订阅者消费,这也是发布订阅消息系统和点对点消息系统最本质的区别。


如何选择


这里如果要去对消息队列的模式进行选择,还是要去根据具体场景来进行选择,比如如果你的服务要被多个服务调用,那毋庸置疑的要选择发布订阅消息系统了。


相关文章
|
前端开发
kkFileView文件预览
kkFileView文件预览
472 2
|
安全
ConcurrentHashMap原如何保证的线程安全?
JDK1.7:使用分段锁,将一个Map分为了16个段,每个段都是一个小的hashmap,每次操作只对其中一个段加锁 JDK1.8:采用CAS+Synchronized保证线程安全,每次插入数据时判断在当前数组下标是否是第一次插入,是就通过CAS方式插入,然后判断f.hash是否=-1,是的话就说明其他线程正在进行扩容,当前线程也会参与扩容;删除方法用了synchronized修饰,保证并发下移除元素安全
291 2
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
638 3
快速上手|HTTP 接口功能自动化测试
|
Docker 容器
Docker 安装 Zookeeper
Docker 安装 Zookeeper
290 2
|
安全 Java Unix
log4cplus最新介绍、详细编译过程及使用(最全面)
log4cplus最新介绍、详细编译过程及使用(最全面)
|
存储 Linux 网络安全
【操作系统】实验二 Proc文件系统
【操作系统】实验二 Proc文件系统
375 1
|
JSON 前端开发 Java
Spring 注解之@RestController与@Controller的区别
Spring 注解之@RestController与@Controller的区别
506 0
|
消息中间件 NoSQL Kafka
消息中间件(RocketMQ、RabbitMQ、ActiveMQ、Redis、kafka、ZeroMQ)以及之间的区别
消息中间件(RocketMQ、RabbitMQ、ActiveMQ、Redis、kafka、ZeroMQ)以及之间的区别
|
存储 Kubernetes 调度
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
264 0