scala - 您如何通过 Play Framework 中的 Websockets 将数据从 Kafka 流发送到客户端?

标签 scala playframework websocket apache-kafka kafka-consumer-api

我正在使用 Playframework 和 Scala。我正在尝试使用来自 Kafka 的数据,处理数据,然后通过 websockets 将数据推送到客户端。不幸的是,我仍然是这项技术的新手。

在查看文档时,他们提到在您想要创建 websocket 时创建一个 actor。下面的代码来自网站。 web socket

import play.api.libs.json.JsValue
import play.api.mvc._
import play.api.libs.streams._

class Controller4 @Inject() (implicit system: ActorSystem, materializer: Materializer) {
  import akka.actor._

  class MyWebSocketActor(out: ActorRef) extends Actor {
     import play.api.libs.json.JsValue
     def receive = {
       case msg: JsValue =>
        out ! msg
     }

     // do i include my kafka consumer here???

  }

  object MyWebSocketActor {
    def props(out: ActorRef) = Props(new MyWebSocketActor(out))
  }

  def socket = WebSocket.accept[JsValue, JsValue] { request =>
    ActorFlow.actorRef(out => MyWebSocketActor.props(out))
  }
}

我的问题是,我将 Kafka 消费者代码放在哪里。我把它放在 Actor 里面吗?这是最佳做法吗?我担心将它放在 kafka 消费者那里的原因是它会阻止。

预先感谢您的帮助。

最佳答案

Akka Streams + Reactive Kafka实际上使这很容易。只需将 Kafka Source 连接到 WebSocket Source 即可通过 WebSocket 将 Kafka 消息发送到客户端。这是一个完整的演示代码:
https://www.jamesward.com/2016/05/25/combining-reactive-streams-heroku-kafka-and-play-framework/

关于scala - 您如何通过 Play Framework 中的 Websockets 将数据从 Kafka 流发送到客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37305697/

相关文章:

java - 无法访问 Play-1.2 View 模板内的 HashMap

search - ElasticSearch Play-1.2 模块在客户端模式下不起作用

javascript - if 语句阻止套接字向客户端发送消息

javascript - boost::asio 是否支持 websockets?

scala - 在 akka http 路由列表上调用 reduce 会产生编译错误(参数连接没有隐式值)

scala - scala 2.10.x 中的隐式解析。这是怎么回事?

scala - Play Framework 中的对列表

angularjs - Chrome 上的 POST 请求 "stall"

scala - 将多个 map 与 map 值合并为自定义案例类实例

node.js - Node + 连接 + WebSockets