现在用的消息队列主要有kafka,rabbitmq和redis。相比另外两个,用redis做消息队列的优点是吞吐量高,延迟低,简单易用,易于部署和运维。缺点是没有ACK机制,可靠性方面不足。 本次用swoole + redis 来模拟个消息推送系统。思路1. 某个业务调用消息接口,将内容和对应的uid存入redis列表中,key为msg。 2. 用户连接swoole后,会有个fd来标识这个会话,
转载 2023-08-01 14:33:16
138阅读
重复消费问题:为了解决消费端因为种种原因而造成的消息丢失问题,我们都知道根源在于因为RabbitMQ的自动ack机制,所以为了避免以上问题,我们会选中手动ack,以确保消息不会因为某些原因而丢失。但随之而来的也有一个问题:如果忘记ack,或者又因为种种原因消费者端没能给RabbitMQ对应ack,无法确认消息已经被消费完了,那这条未被“约束”的消息也许就会被另一个消费者消费,就会造成重复消费问题如
转载 2023-08-15 15:47:52
122阅读
队列:先进先出redis队列Redis不仅可作为缓存服务器,还可用作消息队列。它的列表类型天生支持用作消息队列。由于Redis的列表是使用双向链表实现的,保存了头尾节点,所以在列表头尾两边插取元素都是非常快的。 所以可以直接使用redis的list实现消息队列,只需简单的两个指令lpush和rpop或者rpush和lpop。rabbitmq使用参考网址:利用Python学习RabbitMQ消息
转载 2023-06-26 21:41:02
126阅读
# Spring Boot 与 Redis 队列ACK 实现指南 在微服务架构或者分布式系统中,队列是一种常见的消息传递机制。`Spring Boot`与`Redis`结合可以简单地实现队列的功能,并处理消息的确认(ACK)。本文将详细讲解如何在`Spring Boot`中使用`Redis`实现消息队列以及ACK的流程。 ## 流程概述 我们使用以下步骤实现`Spring Boot`与`
原创 2024-09-23 07:08:39
71阅读
# Redis消息队列ACK ## 什么是Redis消息队列ACK 在使用Redis作为消息队列时,消息的确认机制(ACK)是非常重要的一部分。ACK的作用是确保消息在消费者处理完成后才被认为已经成功消费,防止消息丢失或重复消费。 ## Redis消息队列ACK的工作原理 当消费者接收到消息后,需要对消息进行处理。处理完成后,需要向Redis发送一个确认消息的请求,告诉Redis这条消息已
原创 2024-04-30 04:45:36
190阅读
前言Redis可以通过发布订阅模式、轮询机制实现消息队列。由于没有消息持久化与 ACK 的保证,所以,Redis 的发布订阅功能并不可靠。这也就导致了它的应用场景很有限,建议用于实时与可靠性要求不高的场景。一、Redis发布订阅1.Redis发布订阅模式实现原理服务器中维护着一个pubsub_channels字典,所有的频道和订阅关系都存储在这里。字典的键为频道的名称,而值为订阅频道的客户端链表。
redis之延时队列常用的消息队列我们常见的MQ有RabbmitMq、Kafka、RecoketMQ等等,他们都是专业级的消息队列,各有各的特性。但他们共同的特性就是比较复杂。有没有一种非常简单,同样也非常高效的消息队列呢? 使用redis我们可以非常简单的实现一个高效的消息队列redis的消息队列使用场景使用redis实现的消息队列虽然简单,但是与专业级的相比,肯定是有其不足之处。比
上回说到使用 Redis 的 List 实现消息队列有很多局限性,比如:没有良好的 ACK 机制;没有 ConsumerGroup 消费组概念;消息堆积。List 是线性结构,想要查询指定数据需要遍历整个列表;Stream 是 Redis 5.0 引入的一种专门为消息队列设计的数据类型,Stream 是一个包含 0 个或者多个元素的有序队列,这些元素根据 ID 的大小进行有序排列。它实现了大部分消
转载 2024-02-28 13:34:00
52阅读
消息队列(MQ)相信大家对MQ这个词都不会陌生,不管用过还是没用过的,大多会对他有一定的了解, 那么消息队列有什么好处呢解耦(接触服务之间的耦合度关系)削峰(例如我某个促销活动在某个时间点有非常大的流量涌入,这个时候用Mq做缓存是最好的方式了)异步化(例如有些服务是我不需要在同步链中进行调用的,那么可以用mq来做一个异步消费)传统MQ的缺点MQ基本上和缓存一样是居家必备之良药。然而消息队
该数据结构需要 Redis 5.0.0 + 版本才可用使用概述Redis stream 是 Redis 5 引入的一种新的数据结构,它是一个高性能、高可靠性的消息队列,主要用于异步消息处理和流式数据处理。在此之前,想要使用 Redis 实现消息队列,通常可以使用例如:列表,有序集合、发布与订阅 3 种数据结构。但是 stream 相比它们具有以下的优势:支持范围查找:内置的索引功能,可以通过索引来
转载 2023-08-04 16:45:44
121阅读
Redis 延迟队列1. 基本实现我们平常习惯使用Kafka和RabbitMQ作为消息队列中间件,在应用程序之间增加异步消息传递功能。这两个中间件都是专业的消息队列但是使用RabbitMQ比较复杂,发消息之前要创建Exchange, 再创建Queue, 还要将Queue和Exchange通过某种规则绑定起来,发消息之前要指定routing-key,还需要控制头部信息。消费者在消费消息之前也要进行上
最近在使用redis时发现总有一些消息队列中存在大量的处于unacked状态的消息,一般来说,如果队列中ready状态的消息数比较多,可以认为是消费者的处理能力不足,可以通过增加消费者来解决,而unacked消息存在基本是有以下两点原因:消费者取走消息后没有及时做消息确认,对于开启手动确认机制的,不进行ack则消息会一直以unacked状态留在队列中。消费者处理能力不足。生产者投放消息的速度较快,
在之前探讨延时队列的文章中我们提到了 redisson delayqueue 使用 redis 有序集合结构实现延时队列,遗憾的是 go 语言社区中并无类似的库存。不过问题不大,没有轮子我们自己造:sunglasses:。本文的完整代码实现在 hdt3213/delayqueue ,可以直接 go get 安装使用。使用有序集合结构实现延时队列的方法已经广为人知,无非是将消息作为有序集合的 mem
 1 前提准备  1.1 创建一个springboot项目    技巧01:本博文基于springboot2.0创建  1.2 安装redis    1.2.1 linux版本         1.2.2 windows版本      到redis官网下载windows版本的压缩包后,解压即可  1.3 redis使用    本博文以window版本为例子,linux版本请参见    1
转载 2023-09-16 11:41:58
73阅读
1.概念Redis 的 list(列表) 数据结构常用来作为异步消息队列使用,使用rpush/lpush操作入队列,使用lpop 和 rpop来出队列Redis 的消息队列不是专业的消息队列,它没有非常多的高级特性,没有 ack 保证,如果对消息的可靠性有着极致的追求,那么它就不适合使用。命令方式:生产数据:rpush test:aaron:queue apple banana pear&n
1.介绍 是Redis 专门为消息队列设计的数据类型 在 Redis 5.0 Stream 没出来之前,消息队列的实现方式都有着各自的缺陷,例如:发布订阅模式,不能持久化也就无法可靠的保存消息,并且对于离线重连的客户端不能读取历史消息的缺陷; List 实现消息队列的方式不能重复消费,一个消息消费完就会被删除,而且生产者需要自行实现全局唯一 ID。基于以上问题,Redis 5.0 便推出了 Str
rabbitmq作为优秀的消息队列中间件,估计大家都会用到。但是在实际过程中,生产者会存在消息丢失的情况。 如下示例,总共发送了30W条消息,队列里却只有299954条信息,丢失了46条,对于精度要求很高的应用,这是不可接受的:logger.info("start"); for (int i = 0; i < 300000; i++) { Rabbit
一:利用redis的zset实现消息队列使用场景 1、下单成功,30分钟未支付。支付超时,自动取消订单2、订单签收,签收后7天未进行评价。订单超时未评价,系统默认好评3、下单成功,商家5分钟未接单,订单取消4、配送超时,推送短信提醒......对于延时比较长的场景、实时性不高的场景,我们可以采用任务调度的方式定时轮询处理。如:xxl-job今天我们采用一种比较简单、轻量级的方式,使用 Redis
转载 2023-05-25 18:48:33
136阅读
Redis 的消息队列不是专业的消息队列,它没有非常多的高级特性,没有 ack 保证,如果对消息的可靠性有着极致的追求,那么它就不适合使用,对于那些只有一组消费者的消息队列,使用 Redis 就可以非常轻松的搞定。异步消息队列Redis的list常用来作为异步消息队列使用,使用``rpush/lpush操作入队列,使用lpop/rpop`来出队列。> rpush stack 1 2 3 (i
转载 2023-06-07 11:21:34
266阅读
Redis学习一:认识消息队列二:基于List实现消息队列1.基于List结构模拟消息队列2.基于List的消息队列有哪些优缺点三:基于PubSub的消息队列1.说明2.基于PubSub的消息队列的优缺点四:Redis消息队列-基于Stream的消息队列1.发送消息的命令2.读取消息的方式之一:XREAD2.1.使用示例2.2.问题五:基于Stream的消息队列-消费者组1.常用命令2.消费者监
转载 2024-01-17 10:00:55
84阅读
  • 1
  • 2
  • 3
  • 4
  • 5