消息队列(一)消息队列原理

本贴最后更新于 2459 天前,其中的信息可能已经时移俗易

原文地址 https://www.heayan.com/articles/2018/03/08/1520523463451.html

简介

消息中间件是在消息的传输过程中保存消息的容器。消息中间件再将消息从它的源中继到它的目标时充当中间人的作用。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接受者不可用,消息队列会保留消息,直到可以成功地传递它为止。当然,消息队列保存消息也是有期限的。

特点

1、采用异步处理模式

消息发送者可以发送一个消息而无需等待响应。消息发送者将消息发送到一条虚拟的通道(主题或队列)上,消息接受者则订阅或是监听该通道。一条消息可能最终转发给一个或多个消息接受者。这些接受者都无需对消息发送者做出同步回应。整个过程是异步的。
比如,用户信息注册,注册完毕后过段时间发送邮件或短信。

2、应用程序和应用程序调用关系为松耦合关系

发送者和接受者不必了解对方,只需确认消息。
发送者和接受者不必同时在线。
比如,在线交易系统为了保证数据的最终一致,在支付系统处理完成后会把支付结果放到消息中间件里通知订单系统修改订单支付状态。两个系统通过消息中间件解耦。

消息传递服务模型

image

消息中间件的传递模型

1、点对点模型(PTP)

点对点模型用于消息生产者和消息消费者之间点到点的通信。消息生产者将消息发送到由某个名字表示的特定消费者。这个名字实际上对应于消息服务器中的一个队列(Queue)。在消息传递给消费者之前它被存储在这个队列中。队列消息可以放在内存中也可以是持久的,以保证在消息服务出现故障时仍然能够传递消息。

  • 每个消息只用一个消费者
  • 发送者和接受者没有时间依赖
  • 接受者确认消息接收和处理成功
    image

2、发布-订阅模型(Pub/Sub)

发布者/订阅者模型支持向一个特定的消息主题生产消息。0 或多个订阅者可能对接收来自特定消息主题的消息感兴趣。在这种模型下,发布者和订阅者彼此不知道对方。这种模式下,好比是匿名公告板。这种模式被概括为:多个消费者可以获得消息。在发布者和订阅者之间存在时间依赖性。发布者需要建立一个订阅(subscription),以便能够消费者订阅。订阅者必须保持持续的活动状态以接收消息,除非订阅者建立了持久的订阅。在这种情况下,在订阅者未连接时发布的消息将在订阅者重新连接时重新发布。

  • 每个消息可以有多个订阅者
  • 客户端只有订阅后才能接收到消息
  • 持久订阅和非持久订阅
    image
    特别说明:
    1、发布者和订阅者有时间依赖
    接受者和发布者只有建立订阅关系才能收到消息。
    2、持久订阅
    订阅关系建立后,消息就不会消失,不管订阅者是否都在线。
    3、非持久订阅
    订阅者为了接受消息,必须一直在线。当只有一个订阅者时约定等于点对点模式。

版权所有,转载必须标识原文地址

  • 消息队列
    40 引用 • 52 回帖 • 2 关注
  • 原理
    16 引用 • 44 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8214 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...