Scala Slick:永无止境
发布时间:2020-12-16 18:39:33 所属栏目:安全 来源:网络整理
导读:使用Slick,您可以执行以下操作以从表中生成结果流: val q = for (e - events) yield e.nameval p: DatabasePublisher[String] = db.stream(q.result)p.foreach { s = println(s"Event: $s") } 这将打印事件表中的所有事件,并在最后一行之后终止. 假设您可以
使用Slick,您可以执行以下操作以从表中生成结果流:
val q = for (e <- events) yield e.name val p: DatabasePublisher[String] = db.stream(q.result) p.foreach { s => println(s"Event: $s") } 这将打印事件表中的所有事件,并在最后一行之后终止. 假设您可以通过某种方式通知事件表中何时输入新行,是否可以编写一个在插入事件时连续输出事件的流?一种DB表的尾部-f. 我认为Slick本身不支持这个,但我认为应该可以使用Akka流媒体来提供帮助.因此,如果您可以从Slick Source获取某些东西,直到它为空,那么等待一个事件来指示表中的更多数据,然后流式传输新数据.可能通过使用ActorPublisher绑定此逻辑? 只是想知道某人是否有这方面的经验或任何建议? 解决方法
你是关于ActorPublisher :)这是一个使用PostgreSQL,async DB driver和
LISTEN/NOTIFY mechanism的简单例子:
演员: class PostgresListener extends ActorPublisher[String] { override def receive = { case _ ? val configuration = URLParser.parse(s"jdbc://postgresql://$host:$port/$db?user=$user&password=$password") val connection = new PostgreSQLConnection(configuration) Await.result(connection.connect,5.seconds) connection.sendQuery(s"LISTEN $channel") connection.registerNotifyListener { message ? onNext(message.payload) } } } 服务: def stream: Source[ServerSentEvent,Unit] = { val dataPublisherRef = Props[PostgresListener] val dataPublisher = ActorPublisher[String](dataPublisherRef) dataPublisherRef ! "go" Source(dataPublisher) .map(ServerSentEvent(_)) .via(WithHeartbeats(10.second)) } libraryDependencies中的build.sbt: "com.github.mauricio" %% "postgresql-async" % "0.2.18" Postgres触发器应调用select pg_notify(‘foo’,’payload’) 据我所知,Slick不支持LISTEN. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |