首页 > 编程知识 正文

消息队列如何使用,Redis实现消息队列

时间:2023-05-04 20:57:56 阅读:108419 作者:437

最近提到了消息中间件,我想通过本篇博文对消息队列的相关知识和Java语言中面向消息中间件(MOM )的API (JMS )进行总结。 我想有助于更好地理解消息中间件。

一.消息队列摘要

消息队列(英文: Message queue )是一种进程间通信或同一进程中不同线程之间的通信方式,软件存储列用于处理一系列输入,通常来自用户。

消息队列提供异步通信协议。 每个存储列中的记录都包含详细的说明性数据、发生时间、输入设备类型和特定输入参数。 这意味着消息的发送者和接收者不必同时与消息队列进行交互。 消息将一直保存在队列中,直到收件人取回。

上面的介绍来自维基百科,解释术语是官方的,但你应该知道消息队列可以实现异步通信。 用简单的体系结构模型进行说明。

Producer :消息生产者。 负责向Broker生成和发送消息。

Broker :消息处理中心。 负责消息的保存、确认、重试等,通常其中包含多个queue。

Consumer :消息消费者有责任从Broker获取消息并进行适当的处理。

二.消息队列特点

异步

消息队列本身是异步的,与大多数通信协议不同,接收者可以在发送消息后检索消息。 大多数情况下,需要异步通信协议。 例如,一个进程会通知另一个进程发生了事件,但不需要等待响应。

但是,消息队列的异步特征还存在接收者必须轮询消息队列才能接收最近的消息的缺点。

解除结合

消息队列减少了服务之间的耦合性,并且定义了消息的格式,这样不同的服务就可以通过消息队列进行通信,而无需考虑彼此的实现细节。

例如在订单系统中,订单最终支付成功后,可能需要向用户发送邮件积分等,但其实这已经不是核心流程了。 如果外部系统速度较慢,例如消息网关速度较慢,则主过程的时间会大幅增加,用户一定不想在点击支付几分钟后看到结果。 那么,只需通知邮件系统“支付成功”,并不一定要等待其处理完成。

无线电广播

消息队列的基本功能之一是进行广播。 如果没有消息队列,每次新的运营商访问时,都必须联合新的接口。 有了消息队列,您只需要关心消息是否到达队列。 至于谁愿意订阅,这是下游的事情,无疑大大减少了开发和协调的工作量。

流量峰值切断和流量控制

当下游系统的处理能力存在差异时,利用消息队列建立共同的“载体”。 在下游可以处理的,进行分发和处理。

例如,在电子商务系统中常见的秒杀活动中,每秒可能会有成千上万个请求,但数据库的处理能力有限,这样的并发量很可能会导致后台服务挂起。 此时,可以通过消息队列将请求推入队列,后台服务器将根据以前的数据处理能力处理这些请求。 速度会慢一点,但可以保证服务正常运行。

三. JMS

JMS概述

Javamessageservice(JMS ) APP接口在Java平台中用于在两个APP应用之间或分布式系统之间发送和接收消息以进行异步通信的messagemiddleware

Javamessagingservices是一种与特定平台无关的API,大多数MOM提供程序都支持JMS。

JMS模型

Java消息服务APP结构支持两种模型:点对点或队列模型和发布/订阅模型。

在点对点或队列模型下,生产者向特定队列发布消息,消费者从该队列中读取消息。

只有一个消费者得到信息。

生产者在接收者消费消息的时候不需要处于执行状态,接收者也同样不需要在发送消息的时候处于执行状态。

处理成功的所有消息都将由收件人接收。

投稿人/订阅者模型支持将消息发布到特定消息主题。

多个消费者可以获得信息。

发行者和订阅者之间存在时间依赖性。 发布者必须创建订阅,以便客户可以购买订阅。 除非订阅者建立了永久订阅,否则订阅者必须保持持续活动状态才能接收消息。 在这种情况下,订阅者未连接时发布的消息将在订阅者重新连接时重新发布。

实现JMS提供程序

要使用Javamessagingservices,需要管理会话和队列的JMS提供程序。 现在有很多开源JMS提供程序,包括Kafka、Apache ActiveMQ和RabbitMQ。

参考资料:

3359 tech.meituan.com/MQ-design.html

3359 github.com/Jason Geng 88/blog/blob/master/201705/MQ.MD

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。