ToB企服应用市场:ToB评测及商务社交产业平台

标题: 使用Kafka实现带消息记载的实时传输对话场景(谈天室) [打印本页]

作者: 北冰洋以北    时间: 2024-8-11 08:50
标题: 使用Kafka实现带消息记载的实时传输对话场景(谈天室)
使用Websocket可以实现客户端的双向通讯,客户端可以向服务端发送数据,服务端也可以向客户端发送数据。
传输内容是可以实时传输了,但是如果没有存储功能,一刷新页面(或者重新进入)就再也看不到之前发送的消息,这是一个很大的贫苦。
战略一(数据持久化)
首先想到在传输的时候,顺带将数据存入数据库,貌似这样也是一种可行的方案,但后果是每一次传输都要和数据库进行一次IO,性能低下,甚至有时候可能出现存入失败的环境,导致数据丢失。
战略二(消息队列)
是否能将消息持久化进消息队列呢,消息队列可以保证我们消息的次序性,可靠性,也有一些附带功能例如负载平衡、异步处理处罚、监控等。
优点无数,貌似很完善,实现一下看看效果就知道了~
消息队列选用Kafka
优点如下:
具体采取的模式如下

开多个消费者组,一个消费者组只有一个消费者,也就意味着一个Topic有多个消费者组订阅。
由于Kafka的模式是一个Topic的消息只会不重复的给到一个消费者组,如果消费者组内有两名消费者,此中一名消费者消费了消息的话,另一名消费者无法重复消费此消息。
这样一来,我们只必要写一个接口往Topic发送消息,那么订阅的消费者们就可以实时收到消息了,就算消费者不在线,消息也会存储在Topic当中。
开始实现
新建springboot项目,引入pom





欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4