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);
            }
        }
    }
相关推荐
李可以量化1 小时前
Redis Client 从了解到精通(二)下:String 类型进阶操作全解
redis·git·python·量化交易·qmt
BUG研究员_2 小时前
LangChain 向量数据库实战:Redis 与 Pinecone 的知识点总结
数据库·redis·langchain
醉颜凉3 小时前
Elasticsearch核心架构:集群(Cluster)原理详解与核心作用
elasticsearch·架构·jenkins
醉颜凉3 小时前
Elasticsearch 深度原理:在保证数据一致性的前提下,如何安全更新倒排索引?
大数据·elasticsearch·搜索引擎
李可以量化3 小时前
Redis Client 从了解到精通(二)上:redis-py 高级用法与核心命令实战
前端·数据库·redis·python·缓存·ptrade
仍然.4 小时前
Redis---String
数据库·redis·缓存
JavaPub-rodert4 小时前
Redis 和 MySQL 如何保证数据一致性?从缓存更新到延迟双删完整讲解
redis·mysql·缓存
半个落月5 小时前
Next.js 16 笔记应用实战:Redis 数据链路与组件两版拆分详解
前端·redis·next.js
qq_273272616 小时前
oracle JDK 更换 openJDK
elasticsearch