akka 消息写入 doobie 作为 postgres 的接收器

问题描述

我在接收消息数据时尝试从 akka 演员写入 postgres 表时遇到问题。 我不完全知道真正的probem我认为这是异步上下文,因为当我调用带有一些列表数据作为参数的函数时,该函数应该将列表数据写入postgres,但不是没有执行任何操作,而是没有标记任何错误,只是它不执行写入功能。 数据来自休息点,我使用 akka http 发出请求。

处理写入 postgres 的代码参与者。 代码:

  object ClickUpTeamsActions {
    case class Fetch (writerRef: ActorRef)
    case class Write (teamsData: List[TeamClickUp] )
  }

  class ClickUpTeamsExtractor extends Actor with ActorLogging {
    import ClickUpTeamsActions._

    override def receive: Receive = {
      case Write(teamsData) =>
        println("-------writer")
        println(teamsData)
        val teamsPG: List[Teams] = teamsData.map(data => Teams(data.id,data.name,data.color,data.avatar))
        println(teamsPG)

          val bulkInsert = DoobieTest.insertMany(teamsPG) // function writes into postgres
          val io = bulkInsert.transact(DoobieTest.xa)
          io.unsafeRunSync() // this does not work
        
    }
  }

代码是一个对象,它有一个函数可以写入postgres,这个函数是从actor接收调用的:

import cats.effect.IO
import cats.implicits.catsStdInstancesForList
import doobie.{ConnectionIO,ExecutionContexts,Transactor,Update}

object DoobieTest  {

  import doobie.util.ExecutionContexts
  implicit val cs = IO.contextShift(ExecutionContexts.synchronous)

  val xa = Transactor.fromDriverManager[IO](
    "org.postgresql.Driver",// driver classname
    "jdbc:postgresql:zzzzzzz",// connect URL (driver-specific)
    "yyyyyyyyyyy",// user
    "XXXXXXXXXXXX",// password
  )

  def insertMany(ps: List[Teams]): ConnectionIO[Int] = {
    val sql = "insert into Teams (id,name,color,avatar) values ( ?,?,?) ON CONFLICT(id) DO UPDATE SET name = EXCLUDED.name"
    Update[Teams](sql).updateMany(ps)
  }
}

错误在于:

// this code does not work when run on receive..
    val bulkInsert = DoobieTest.insertMany(teamsPG) // function writes into postgres
    val io = bulkInsert.transact(DoobieTest.xa)
    io.unsafeRunSync() // this does not work

    

如果有其他方法可以做到这一点,它会有所帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...