【项目】Kafka,构建TB级异步消息系统

社区项目中利用Kafka构建TB级异步消息系统。主要包含内容:Kafka的概念(阻塞队列,Kafka入门,Spring整合Kafka),项目中如何利用Kafka进行消息通知(发送系统通知和显示系统通知)等。

阻塞队列

  • BlockingQueue阻塞队列
    • 解决线程通信的问题
    • 阻塞方法:put、take
  • 生产者消费者模式
    • 生产者:产生数据的线程
    • 消费者:使用数据的线程
  • 实现类
    • ArrayBlockingQueue
    • LinkedBlockingQueue
    • PriorityBlockingQueue、SynchronousQueue、DelayQueue等。

Kafka入门

  • Kafka入门

    • Kafka是一个分布式流媒体平台
    • 应用:消息系统、日志收集、用户行为追踪、流式处理
  • Kafka特点

    • 高吞吐量、消息持久化、高可靠性、高扩展性
  • Kafka术语

    • Broker、Zookeeper(一个服务器称之为一个Broker。Zookeeper用来管理集群)

    • Topic、Partition、Offset(生产者发布消息的位置叫Topic,用来存放消息。Partition是对Topic的分区,每个分区都是按顺序追加写。Offset是消息在分区中的索引。)

    • Leader Replica(主副本,可以做响应,提供副本)、Follower Replica(从副本,不做相应,主副本挂了之后选一个从副本重新为主副本。)

Spring整合Kafka

  • 引入依赖

    • spring-kafka
  • 配置kafka

    • 配置server、consumer

      在application.properties下配置:

  • 访问kafka

    • 生产者

      1
      kafkaTemplate.send(topic,data);
    • 消费者

      1
      2
      @KafkaListener(topics={"test"})
      public void handleMessage(ConsumerRecord record){}

发送系统通知

  • 触发事件

    • 评论后,发布通知

      重写CommenrController类:

    • 点赞后,发布通知

      在likeController类中重写:

    • 关注后,发布通知

      重写FollowController类:

  • 处理事件

    • 封装事件对象

      在entity包下新建Event类:

    • 开发事件的生产者

      新建event包,在event包下新建EventProducer作为生产者类激活事件:

    • 开发事件的消费者

显示系统通知

  • 通知列表

    • 显示评论、点赞、关注三种类型的通知

      在MessageController类中新增getNoticeList方法,查询评论类通知:

      在MessageController类中的getNoticeList方法中查询点赞通知:

      在MessageController类中的getNoticeList方法中查询关注通知:

  • 通知详情

    • 分页显示某一类主题所包含的通知

  • 未读消息

    • 在页面头部显示所有未读消息数量

      在MessageController类中的getNoticeList方法中查询所有未读消息数量:

      notice.html中做以下修改:

0%