首页 > 编程知识 正文

消息队列有什么用,queue的用法

时间:2023-05-05 19:02:27 阅读:108382 作者:3714

文章前言1 .有关消息队列的概念2 .消息队列的消费场景1、消息最多被消费一次2、消息至少被消费一次3、消息只被消费一次

前言

消息队列(MessageQueue )是服务架构中常见的组件,可以用于服务之间的解耦、事件广播、任务的异步/延迟处理等,经常用于分布式系统之间的交互信息接着简述消息队列的实现如何满足一些消费场景。

一.负责生成消息队列相关概念生产者(Producer )信息

负责消费者(Consumer )消费信息

消息:在APP应用程序之间传输的数据。 消息非常简单,例如只包含文本字符串,或者更复杂,或者包含嵌入对象。

消息队列(Message Queue )是一种APP之间的通信方法,消息发送后可以立即回复,消息系统可以确保消息的传送。 消息发布者无论是谁来接收都将消息发布到MQ上,消息使用者无论是谁发布的都将从MQ接收消息。 这样,发布者和使用者都不需要知道对方的存在。

消息中介器(负责消息的存储/传输,传输分为推送和抽取两种。

拉是指Consumer主动从消息博客中获取消息; 推送是指消息浏览器主动将Consumer感兴趣的消息推送至Consumer。

二、消息队列消费场景1、消息最多只消费一次,这一场景最容易令人满意,特点是消息队列吞吐量大,实现简单。 适用于消除新闻、允许新闻重复消费的任务。

a)Producer发送消息到Message Broker阶段:

Producer向消息博客发送消息,不要求消息博客确认对接收到的消息的响应,Producer也不需要在意消息博客是否接收到消息。

b)Message Broker存储/转发阶段:

消息中介器的存储器不需要持久性,可以传输消息,而无需考虑Consumer是否实际收到。

c)Consumer消费阶段:

在Consumer从消息中介检索到消息后,可以从消息中介中删除消息,也可以在消息中介被Consumer消耗时删除消息。 不需要在意Consumer最后的消息处理结果。

2、信息至少被消耗一次,适用于不能容忍信息丢失,但允许重复消耗的任务。

a)Producer发送消息到Message Broker阶段:

Producer必须向消息浏览器发送消息,消息浏览器必须响应消息的确认。

b)Message Broker存储/转发阶段:

消息中介器必须提供永久担保。 转发消息时,消息中介必须通知Consumer删除消息才能删除消息。

c)Consumer消费阶段:

Consumer从消息中介获取消息,在消息中介完成之前无法删除消息中介上的消息。

3、信息只被消费一次,适用于信息消费情况要求非常高的任务,实现起来很复杂。 这里的“只被消费一次”包括以下两个场景。

1 )保存在消息拦截器中的消息只被Consumer消费一次,场景要求如下

a)Producer发送消息到Message Broker阶段:

Producer向消息博客发送消息,不要求消息博客确认对接收到的消息的响应,Producer也不需要在意消息博客是否接收到消息。

b)Message Broker存储/转发阶段:

消息中介器必须提供持久性保证,并且每条消息在消费者队列中具有唯一的标识符。 此唯一标识符可以由Producer或消息浏览器生成。

c)Consumer消费阶段:

Consumer从消息中介检索到消息后,必须记录消息的消息id,以防止后续消耗中的消息重复消耗。 例如,Consumer获取并消费了消息后,还没从消息中介中删除消息,就马上挂断了。 这样,只要消息中介将消息重新加入到消耗队列中,消息就会被重新消耗。

2 ) Producer生成的消息只被Consumer消费一次,场景被要求如下

a)Producer发送消息到Message Broker阶段:

Producer向消息浏览器发送消息。 消息浏览器必须响应消息的确认。 此外,Producer负责为消息生成唯一的id,以防止再次消耗Consumer。 (

b)Message Broker存储/转发阶段:

消息中介器必须提供持久性保证,并且每条消息在消耗队列中都有唯一的id。 此唯一id必须由Producer生成。

c)Consumer消费阶段:

Consumer从消息中介检索到消息后,必须记录消息的消息id,以防止后续消耗中的消息重复消耗。 例如,Consumer获取并消费了消息后,还没从消息中介中删除消息,就马上挂断了。 这样,只要消息中介将消息重新加入到消耗队列中,消息就会被重新消耗。

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