我正在使用Playframework和Scala。我试图从Kafka使用数据,处理数据,然后通过websockets将数据推送到客户端。不幸的是,我仍然是这项技术的新手。
当浏览文档时,他们提到要在创建websockets时创建一个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消费者代码。我把它放在演员里面吗?这是最佳做法吗?我担心将kafka消费者放在那里的原因是它会阻止它。
提前感谢您的帮助。
答案 0 :(得分:3)
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/