使用Kafka、Java和SpringBoot构建实时聊天应用程序

原始地址:https://dev.to/subhransu/realtime-chat-app-using-kafka-springboot-reactjs-and-websockets-lc

使用Kafka、Java和SpringBoot构建实时聊天应用程序

本教程将演示如何在Java和SpringBoot作为后端,ReactJS作为前端的情况下,使用Kafka作为消息代理构建一个简单的实时聊天应用程序。
这个项目只是为了学习目的,不包含生产就绪的代码。

什么是Kafka

Apache Kafka是一个广泛流行的分布式消息系统,提供快速、可扩展、高可用的发布-订阅消息系统,用于解决大型软件系统组件之间的通信和集成问题。

Kafka可以用来做什么?
  • 消息传递 - 应用程序之间的通信
  • 网站活动跟踪(点击、搜索等)
  • 度量收集 - 代替写入日志
  • 源流和目标流处理

安装

在开始项目之前,我们需要下载Zookeeper和Kafka。
你可以从这里下载Kafka
将压缩文件的内容解压到你喜欢的文件夹中。
在Kafka目录中,进入bin文件夹。你会找到很多有用于运行Kafka应用程序的bash脚本。
如果你使用的是Windows,你也会在windows文件夹中找到相同的脚本。本教程使用的是Linux命令,但如果您使用的是Microsoft操作系统,则只需使用相应的Windows版本即可。

启动Zookeeper
Zookeeper基本上是用来管理Kafka集群的。它与下载的Kafka目录捆绑在一起,所以我们不需要单独下载它。
要启动Zookeeper,进入bin目录,然后运行以下命令。
./zookeeper-server-start.sh …/config/zookeeper.properties

启动Kafka Broker
接下来,要启动Kafka Broker,请在相同目录中运行以下命令:
./kafka-server-start.sh …/config/server.properties
确保在启动Kafka之前启动zookeeper,因为Kafka从Zookeeper中接收诸如分区中保存的偏移信息等信息。

创建Kafka主题
在分别运行Zookeeper和Apache Kafka之后,我们可以创建一个主题,并作为生产者和消费者发送和接收数据。
kafka-topics --create --topic kafka-chat --zookeeper localhost:2181 --replication-factor 1 --partitions 1
这里我们创建了一个名为kafka-chat的主题来处理聊天消息。我们稍后会在聊天应用程序中使用这个主题。

现在,让我们写些代码。

使用Java、SpringBoot和Kafka开发后端

我们将使用Spring Boot开发后端。
使用以下详细信息使用Spring Initializer下载一个新的Spring Boot项目。

  • 项目:Maven项目
  • 语言:Java
  • 组:com.shubh
  • Artifact:kafka-chat-server
  • 依赖项:
  • Spring for Apache Kafka
  • Spring for WebSocket

为什么使用WebSocket?
由于Apache Kafka不能通过经典的GET和POST操作将消费者消息立即发送到客户端。
我使用WebSocket执行了这些操作,它提供了全双工双向通信,这意味着信息可以同时从客户端流向服务器,反之亦然。
它在聊天应用程序中被广泛使用。

首先,我们需要创建一个Message模型,用于保存消息的内容。

Message.java

package com.shubh.kafkachat.model;

public class Message {
   
    private String sender;
    private String content;
    private String timestamp;
    
    public Message() {
   
    }
    
    public String getTimestamp() {
   
        return timestamp;
    }
    
    public void setTimestamp(String timestamp) {
   
        this.timestamp = timestamp;
    }
    
    public String getSender() {
   
        return sender;
    }
    
    public void setSender(String sender) {
   
        this.sender = sender;
    }
    
    public Message(String sender, String content) {
   
        this.sender = sender;
        this.content = content;
    }
    
    public String getContent() {
   
        return content;
    }
    
    public void setContent(String content) {
   
        this.content = content;
    }
    
    @Override
    public String toString() {
   
        return "Message{" +
                "sender='" + sender + '\'' +
                ", content='" + content + '\'' +
                ", timestamp='" + timestamp + '\'' +
                '}';
    }
}

开发Producer将消息推送到Kafka主题

首先,我们需要为Producer编写一个配置类。

ProducerConfiguration.java

@EnableKafka
@Configuration
public class ProducerConfiguration {
   
    
    @Bean
    public ProducerFactory<String, Message> producerFactory() {
   
        return new DefaultKafkaProducerFactory<>(producerConfigurations());
    }
    
    @Bean
    public Map<String, Object> producerConfigurations() {
   
        Map<String, Object> configurations = new HashMap<>(
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值