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);
            }
        }
    }
相关推荐
ly76897 小时前
Redis 大 Key 与热点 Key 生产治理:发现、拆分、限流与本地缓存的组合策略
redis·限流·本地缓存·大key·热点key
ShineWinsu10 小时前
对于Redis:AOF持久化的解析
linux·数据库·redis·缓存·面试·持久化·aof
仍然.10 小时前
Redis---集群
数据库·redis·缓存
hweiyu0012 小时前
Redis命令:HSCAN
redis·缓存
Elasticsearch12 小时前
使用 Lucene 搜索你的 Bean — 索引
elasticsearch
ly768914 小时前
Redis 分布式锁的边界条件:Redlock 争议、锁续期与客户端崩溃后的互斥失效
数据库·redis·分布式·分布式锁·watchdog·redlock
Elasticsearch16 小时前
最快的工作是你根本不需要做的工作:Elasticsearch 中速度提升 100 倍的排序查询
elasticsearch
ShineWinsu16 小时前
对于Redis:RDB持久化的解析
linux·数据库·redis·缓存·面试·持久化·rdb
Elastic 中国社区官方博客1 天前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
Elasticsearch1 天前
使用 Lucene 搜索你的 Bean — 搜索
elasticsearch