RabbitMQ+elasticsearch+Redis,实现新增内容并异步到es中,是否消费成功检测

RabbitMQ springcloud+elasticsearch实现前端页面新增文章内容,异步到elasticsearch中,可提供进行高亮搜索

新增文章时,需要通过RabbitMQ步到elasticsearch,为了防止有消息没有发送并接收成功,将文章存到redis中,待elasticsearch消费成功后,将redis中的key进行删除,如没有消费成功,则重复发送mq消息。

新增文章内容实现类-方法部分

java 复制代码
String message = JSON.toJSONString(上传的实体类);
//Redis
String key = "reids-key名称";
//设置zset类型,将当前新增的时间设置为score,用于检测key的创建时长是否超过指定时间
redisTemplate.opsForZSet().add(key,message,System.currentTimeMillis());

RabbitMQ监听类-方法部分

java 复制代码
//当elasticsearch中数据插入成功,删除redis中对应的key-value
redisTemplate.opsForZSet().remove(key,message);

定时任务-检查是否有未消费的内容

java 复制代码
    @Autowired
    private AmqpTemplate amqpTemplate;
    
//检查超过五分钟,还存在在redis中的数据,进行mq补发
public void checkRabbitMessage() {
        String key = "reids-key名称";
        double maxTime = System.currentTimeMillis() - 60 * 1000 * 5;
        Set<String> mes = redisService.rangeByScore(key, 0, maxTime);
        if (mes != null && !mes.isEmpty()) {
            for (String value : mes) {
                //未发送成功的消息,进行补发
                amqpTemplate.convertAndSend(RabbitConfig.EXCHANGE_NAME,RabbitConfig.ROUNTING_KEY,value);
            }
        }
    }
相关推荐
吃饱了得干活2 小时前
RabbitMQ 原理解析(下):存储、集群与可靠投递
后端·rabbitmq
迷茫的大专生3 小时前
高可用总结
redis·mysql·nginx·高可用
Elasticsearch5 小时前
列式存储并不等同于列式数据库。Columnar 模式为 Elasticsearch 带来了什么
elasticsearch
辉灰笔记5 小时前
Redis6.0.10升级迁移至Redis7.4.6(修复CVE‑2025‑49844,业务无需重启)
redis·redis7·漏洞修复·数据库迁移·redis平滑升级·cve-2025-49844
sdm0704277 小时前
Linux 中安装 Redis 5
redis
草莓熊Lotso8 小时前
【Redis 进阶】主从复制深度解析:从配置落地到 PSYNC 同步原理
linux·开发语言·网络·数据库·redis·缓存·php
Elastic 中国社区官方博客9 小时前
将 Vercel 数据导入 Elastic:无需安装任何东西的无服务器可观测性
大数据·运维·elasticsearch·搜索引擎·云原生·serverless·全文检索
Elasticsearch9 小时前
我们如何将 PromQL 构建到 Elasticsearch 中
elasticsearch
Elasticsearch10 小时前
你和你的 AI agent 不应该使用 curl:介绍 Elastic CLI 和 Agent Skills
elasticsearch
灯澜忆梦10 小时前
【Redis中间件】#2 | 基础数据类型语法
redis·后端