我想在我的反应式sql客户端事务中使用Kotlin协程。为了简单起见,我打算使用提供的助手函数<code>io.vertx.mutiny.sqlclient。此处文档中提到的池#withTransaction。由于传递的函数不是协程挂起函数,因此当我试图编译以下代码时,我得到了一个类似<code>的错误:挂起函数只能在协程体中调用
val client : PgPool
...
suspend fun someServiceFunction () {
client.withTransaction { connection ->
repository.save(connection, entity).awaitSuspending() //This is not working
...
}
}
withTransaction的函数头如下所示
@CheckReturnValue
public <T> Uni<T> withTransaction(Function<SqlConnection, Uni<T>> function)
我问自己,是否还有一种方法可以在kotlin协程中使用它,因为我对它们非常陌生。
谢谢你的帮助!
我不熟悉Mutiny和Quarkus,但似乎有一种方法可以从<code>延迟转换
因此,您可以创建自己的 withTransaction
挂起版本,如下所示:
import io.vertx.mutiny.sqlclient.SqlConnection
import io.vertx.mutiny.sqlclient.Pool
@OptIn(ExperimentalCoroutinesApi::class)
suspend fun <T> Pool.withTransaction(block: suspend (SqlConnection) -> T): T = coroutineScope {
client.withTransaction { connection ->
async { block(connection) }.asUni()
}.awaitSuspending()
}
然后使用它:
suspend fun someServiceFunction() {
client.withTransaction { connection ->
repository.save(connection, entity).awaitSuspending()
// potentially other suspending stuff here, without the need to combine()
}
}
但这就引出了一个问题,如果最终你想使用Kotlin协程,为什么要使用Vertx的Mutiny变体呢?我认为默认情况下,Vertex与Java futures一起工作,后者也与协程集成。
我想使用Quarkus中的JooqDSL来构建我的SQL(并希望执行它们) 因此,我添加了以下Quarkus JOOQ扩展。 因为我想在我的项目中使用反应式PG SQL客户端,所以我问自己,例如JOOQ的< code>fetch()方法是否会阻塞线程?它是与引擎盖下的反应式vertx客户端兼容还是使用阻塞式客户端?看起来像后者,因为它不返回未来或者类似的东西。 在这种情况下,我应该只使用JOOQ来
在一节中,引入了接口,允许在请求中注入头,但必须返回同步响应。我们不能使用,这正是我的情况所需要的,因为我需要在头中添加一个令牌,而这个令牌是由返回的另一个restendpoint的请求检索的。 我如何在新的实现中实现这一点?如果不可能,有没有解决办法?
我使用的是客户端。客户端有一个<code>rxWrite<code>函数,它返回<code>Single 我已经编写了以下工作示例。 test():测试链接和日志记录的函数 writeKafka:将给定的字符串写入Kafka并返回Single writeError:始终返回具有相同类型错误的单个 所以当我调用< code>writeKafka时,它只打印< code>Error2,但是如果我使用<
下列协程客户端是Swoole内置的类,其中 ⚠️ 标志的不要再使用,使用PHP原生的函数+一键协程化。 协程TCP/UDP客户端 协程HTTP客户端 协程HTTP2客户端 协程PostgreSQL客户端 协程Socket客户端 ⚠️ 协程Redis客户端 ⚠️ 协程MySql客户端 ⚠️ 协程System(Coroutine\System),主要是文件操作相关的不推荐使用。 超时规则 所有的网络请
我尝试为我的后期服务添加一个示例,这是一个使用quarkus构建的简单rest API。 java版本运行良好。 当我添加另一个 Kotlin 来测试 Quarkus 中的 Kotlin 和 Gradle 支持时,它失败了,REST 客户端接口无法注入为 CDI bean。 是Jaxrs资源,用于公开将原始两个API组合在一起的聚合API。 以上两种注入Bean的方法都失败了。 REST客户端接口
!> 本客户端不再推荐使用,推荐使用Swoole\Runtime::enableCoroutine + phpredis 或 predis 的 方式,即一键协程化原生PHP的redis客户端使用. 使用示例 Co\run(function () { $redis = new Swoole\Coroutine\Redis(); $redis->connect('127.0.0.1',