十次方项目【13】:消息通知微服务:文章订阅&文章点赞

本文介绍了十次方项目中文章订阅和点赞功能的实现,包括通过Redis实现群发消息功能,用户订阅文章作者后的消息通知,以及文章点赞后的点对点消息通知。同时,讨论了基于数据库实现通知系统存在的问题,如数据库访问压力大、服务器性能压力大,并提出了使用RabbitMQ和全双工长连接(如WebSocket和Netty)作为改进方案。
摘要由CSDN通过智能技术生成

学习目标
文章订阅 - 实现群发消息功能
文章点赞 - 实现点对点消息功能

一 文章订阅 - 实现群发消息功能

1.1 订阅文章作者

用户在登录十次方以后,可以查看文章。如果觉得文章好,可以订阅文章作者,从而可以收到这个作者发布的新文章的消息。所以需要完成根据文章id,订阅文章作者。

  1. 功能分析
  • 用户之间的文章订阅关系的数据存放在redis中。
  • 用户订阅文章作者,则系统将作者的id放入用户自己的订阅集合(set类型),同时系统将用户的id放入文章作者的订阅者集合中。
  • 由于redis的set集合,其中的数据是不重复的,所以不用担心重复数据的问题。
  1. 代码实现
    需要在tensquare_article微服务中添加根据文章id订阅文章作者的功能,在ArticleController中添加以下代码:
 /**
     * 订阅或者取消订阅文章作者
     * @param map
     * 测试数据
     * {
     * 	"userId":"1",
     * 	"articleId":"2"
     * }
     * @return
     */
    @PostMapping("/subscribe")
    private Result subscribe(@RequestBody Map map){
        //根据文章ID,订阅文章作者,返回订阅状态,true表示订阅成功,false表示取消订阅成功
        Boolean flag = articleService.subscribe(map.get("userId").toString(),map.get("articleId").toString());

        if(flag){
            return new Result(true,StatusCode.OK,"订阅成功");
        }else{
            return new Result(true,StatusCode.OK,"订阅取消");
        }
    }

编写ArticleService

    @Autowired
    private RedisTemplate redisTemplate;//注入Redis
    
    public Boolean subscribe(String userId, String articleId) {
        //根据文章ID查询文章作者ID
        String authorId = articleDao.selectById(articleId).getUserid();
        //将订阅设置为redis中的集合
        String userKey = "article_subscribe_"+userId;
        String authorKey = "article_author_"+authorId;

        //通过isMember(K key, Object o)方法检查给定的元素是否在变量中
        Boolean flag = redisTemplate.boundSetOps(userKey).isMember(authorId);
        //userKey和authorKey分别为用户集合和作者集合,存放的authorId和userId为Key,防止重复订阅
        if(flag){
            //如何flag为true,已经订阅,则取消
            redisTemplate.boundSetOps(userKey).remove(authorId);
            redisTemplate.boundSetOps(aut
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值