【问题标题】:Using Apache Kafka for real time messaging使用 Apache Kafka 进行实时消息传递
【发布时间】:2021-02-24 21:12:45
【问题描述】:

我们有一个已经在 Spring MVC 中开发的在线考试系统,以及用于离线监考的实时网络摄像头图像捕获和上传,现在客户需要在线或实时监考解决方案,在线监考人员可以看到在线候选人的实时图像并基于此(如果他/她觉得有任何不当行为)可以向在线候选人发送警告消息。

要从在线监考向考生发送警告消息,我们正在考虑使用 Apache kafka,因此来自在线监考服务器(Spring Boot)的消息将发送到 kakfa 服务器,每个考试服务器(Spring MVC)都会使用该消息。到目前为止,我们很清楚,但是在考试服务器收到消息后如何在不刷新或从浏览器到考试服务器进行 REST 调用的情况下向特定考生显示该消息?或者有没有其他优雅的方式来这样做?

【问题讨论】:

  • 您始终可以使用 websockets 打开消息总线并连接到服务器。现在,由于您的候选人正在使用浏览器并在线,因此套接字已连接。你可以随时发布。一旦他们不在线,您需要将消息存储到系统的收件箱中,然后再次连接套接字,只需提供所有消息。

标签: java spring-boot spring-mvc apache-kafka


【解决方案1】:

如果您需要在用户屏幕上立即弹出消息,您可能需要设置 WebSockets。借助 WebSockets,考生的浏览器将建立并保持与考试服务器的连接,并且考试服务器将能够将消息推送到浏览器。

这篇文章解释的很好:https://medium.com/swlh/websockets-with-spring-part-1-http-and-websocket-36c69df1c2ee

另见https://www.baeldung.com/websockets-spring

【讨论】:

  • 喜欢 socket.io 还是 sockjs?如果有的话,我必须如何使用网络套接字,那么为什么要使用 kafka?与客户端通过 Web 套接字直接连接到 Web 服务器的架构相比,通过添加额外的 kafka 层应该获得什么好处?
  • 是的,socket.io 可能是最著名的,但还有其他的。使用 Kafka 的原因是将监考服务器与考试服务器分离。这样,当有更多人参加考试时,您只需要启动更多考试服务器,它们就会处理保持与学生浏览器的开放连接的负载
【解决方案2】:

正如您在图表中明确指出的那样,将 Kafka 直接暴露在 Internet 上并不是可行的方法,相反,您需要一个中介来分发消息数据。这通常是消息代理,或者理想情况下是专为 Internet 数据传输而设计的实时消息服务。请参阅下面的简化图。

为了让您的堆栈保持简单、安全和可扩展,我强烈建议您考虑在您的客户端和 Kafka 之间使用一个面向 Internet 的中间消息代理。

How to stream Kafka messages to Internet-facing clients over WebSockets”中深入探讨了整个主题

【讨论】:

  • 喜欢 socket.io 还是 sockjs?如果有的话,我必须如何使用网络套接字,那么为什么要使用 kafka?与客户端通过 Web 套接字直接连接到 Web 服务器的架构相比,通过添加额外的 kafka 层应该获得什么好处?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多