反应堆缓存Mono Kotlin查找类型问题

反应堆缓存Mono Kotlin查找类型问题,kotlin,project-reactor,spring-cloud-gateway,Kotlin,Project Reactor,Spring Cloud Gateway,我有一个项目,我使用带有SpringCloudGateway的Reactor(版本Hoxton.SR5) 我想为网关从其他服务查询的数据实现缓存 据我所知,@Cacheable注释与reactor 3.3不兼容,所以我选择了CacheMono并结合咖啡因 我试图编写的代码应该做一个相当简单的工作: 检查缓存中的条目 如果错过,请查询服务 创建单声道 mono返回后,将值放入缓存中 如果缓存命中,只需返回Mono即可 讨厌的代码(函数getFromSource通过Webclient返回一

我有一个项目,我使用带有SpringCloudGateway的Reactor(版本Hoxton.SR5) 我想为网关从其他服务查询的数据实现缓存

据我所知,@Cacheable注释与reactor 3.3不兼容,所以我选择了CacheMono并结合咖啡因

我试图编写的代码应该做一个相当简单的工作:

  • 检查缓存中的条目
  • 如果错过,请查询服务
    • 创建单声道
    • mono返回后,将值放入缓存中
  • 如果缓存命中,只需返回Mono即可
讨厌的代码(函数
getFromSource
通过Webclient返回一个Mono):


var myCache:Cache=caffee.newBuilder()
.expireAfterWrite(1,时间单位为分钟)
.最大尺寸(1000)
.build()
趣味游戏(id:String):单声道{
返回CacheMono
.查找(
{键->
单声道
.justOrEmpty(myCache.getIfPresent(键))
.map{s->
下一个(s)
}
},
身份证件
)
.oncaches简历{
getFromSource(id)
}
.并用{(键、信号)->
Mono.fromRunnable{
可选的
.ofNullable(signal.get())
.ifPresent{值:域对象->
myCache.put(键,值)
}
}
}
}
它抱怨如下:

Type inference failed: fun <KEY : Any!, VALUE : Any!> lookup(p0: (KEY!) -> Mono<Signal<out VALUE!>!>!, p1: KEY): CacheMono.MonoCacheBuilderCacheMiss<KEY!, VALUE!>
cannot be applied to
((String!) -> Mono<Signal<@Nullable DomainObject!>!>,String)
类型推断失败:有趣的查找(p0:(键!)->Mono!,p1:KEY):CacheMono.MonoCacheBuilderCacheMiss
不能应用于
((字符串!)->单声道,字符串)

非常感谢您的帮助。

为查找方法提供类型参数:

.lookup<String, DomainObject>(
.lookup(
.lookup<String, DomainObject>(