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);
}
}
}