08修改阅读行为的类ApReadBehaviorServiceImpl的saveReadBehavior方法
ArticleBehaviorMsg articleBehaviorMsg = new ArticleBehaviorMsg(
dto.getArticleId(),
1,
ArticleBehaviorMsg.ArticleBehaviorType.COLLECTION.COMMENTe.VIEWS.LIKES
);
kafkaTemplate.send(HotArticleConstants.HOT_ARTICLE_SCORE_STREAM_TOPIC, JsonUtils.toString(articleBehaviorMsg));
把value转对象
ArticleBehaviorMsg articleBehaviorMsg = JsonUtils.toBean(value, ArticleBehaviorMsg.class);
articleBehaviorMsg.getArticleId().toString()
public KeyValue<String, String>
Long.valueOf(key) @runwith
JsonUtils.toBean
JsonUtils.toString(streamMsg);
Optional
.toStream().map(new KeyValueMapper<Windowed<String>, String, KeyValue<String, String>>()
switch (articleBehaviorMsg.getType()) {
case LIKES:
streamMsg.setLikes(streamMsg.getLikes() + articleBehaviorMsg.getNum());
break;
case VIEWS:
streamMsg.setViews(streamMsg.getViews() + articleBehaviorMsg.getNum());
break;
case COMMENT:
streamMsg.setComment(streamMsg.getComment() + articleBehaviorMsg.getNum());
break;
case COLLECTION:
streamMsg.setCollection(streamMsg.getCollection() + articleBehaviorMsg.getNum());
break;
}
System.out.println("streamMsg=="+streamMsg);
return JsonUtils.toString(streamMsg);
}
}
/ /文章分值计算结果接收监听器
@Component
@Slf4j
public class HotArticleScoreConsumerListener {
@Autowired
private ApHotArticlesService hotArticlesService;
@KafkaListener(topics = HotArticleConstants.HOT_ARTICLE_SCORE_CONSUMER_TOPIC)
public void receiveMsg(ConsumerRecord<String,String> record){
Optional<ConsumerRecord<String, String>> optional = Optional.ofNullable(record);
if(optional.isPresent()){
String value = record.value();
if(StringUtils.isNotBlank(value)){
ArticleBehaviorStreamMsg streamMsg = JsonUtils.toBean(value, ArticleBehaviorStreamMsg.class);
hotArticlesService.updateHotArticle(streamMsg);
}
}
}
}
更新热点文章信息 void updateHotArticle(ArticleBehaviorStreamMsg streamMsg); @Override
public void updateHotArticle(ArticleBehaviorStreamMsg streamMsg) {
Long articleId = streamMsg.getArticleId();
ApArticle apArticle = apArticleService.getById(articleId);
HotArticleVo hotArticleVo = BeanHelper.copyProperties(streamMsg, HotArticleVo.class);
hotArticleVo.setId(streamMsg.getArticleId());
this.computeScore(hotArticleVo);
long score = hotArticleVo.getScore() * 3;
String redisKey = PRE_CHANNEL_FIX + apArticle.getChannelId();
redisTemplate.opsForZSet().incrementScore(redisKey,articleId.toString(),score);
String redisKeyRcommend = PRE_CHANNEL_FIX + 0;
incrementScoreredisTemplate.opsForZSet().incrementScore(redisKeyRcommend key ,articleId.toString(),score);
}
