Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在PlayFramework中通过WebSocket将数据从Kafka流发送到客户端?_Scala_Playframework_Websocket_Apache Kafka_Kafka Consumer Api - Fatal编程技术网

Scala 如何在PlayFramework中通过WebSocket将数据从Kafka流发送到客户端?

Scala 如何在PlayFramework中通过WebSocket将数据从Kafka流发送到客户端?,scala,playframework,websocket,apache-kafka,kafka-consumer-api,Scala,Playframework,Websocket,Apache Kafka,Kafka Consumer Api,我正在使用Playframework和Scala。我试图使用来自Kafka的数据,处理数据,然后通过WebSocket将数据推送到客户端。不幸的是,我对这项技术还比较陌生 在浏览文档时,他们提到了在创建WebSocket时创建一个actor。下面的代码来自网站 我的问题是,我应该把卡夫卡消费代码放在哪里。我要把它放在演员里面吗?这是最佳实践吗?我之所以担心把它放在卡夫卡消费者那里,是因为它会阻塞 提前感谢您的帮助。Akka Streams+实际上让这变得非常简单。只需将Kafka源连接到WebS

我正在使用Playframework和Scala。我试图使用来自Kafka的数据,处理数据,然后通过WebSocket将数据推送到客户端。不幸的是,我对这项技术还比较陌生

在浏览文档时,他们提到了在创建WebSocket时创建一个actor。下面的代码来自网站

我的问题是,我应该把卡夫卡消费代码放在哪里。我要把它放在演员里面吗?这是最佳实践吗?我之所以担心把它放在卡夫卡消费者那里,是因为它会阻塞

提前感谢您的帮助。

Akka Streams+实际上让这变得非常简单。只需将Kafka源连接到WebSocket源,即可通过WebSocket向客户端发送Kafka消息。下面是一个完整的演示,包含以下代码:

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))
  }
}