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);
            }
        }
    }
相关推荐
划破黑暗的第一缕曙光3 小时前
[C++]:5.STL:string(2)
java·c++·redis
海鸥-w7 小时前
Redis 配置与排错说明
java·数据库·redis·bootstrap
hweiyu007 小时前
Redis命令:SMOVE
redis·缓存
wifi___9 小时前
Redis分布式锁
数据库·redis·分布式
夕除11 小时前
redis--IO复用(epoll)
redis
Elastic 中国社区官方博客11 小时前
Elastic 重大事件功能如何将 100 条日志样本转化为检测规则
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎
乐观的Terry13 小时前
AI翻译助手-JWT与redis无状态认证
数据库·redis·缓存
我不会起名字32213 小时前
Redis 从 0 到 1(十二):先删缓存还是先更新库?4 种方案的 Go 并发实测
redis·go·并发·延迟双删·缓存一致性
牧瀬クリスだ14 小时前
Redis String深度解析:从底层到五大实战场景
数据库·redis·缓存