我无法让@Adhika Setya Pramudita 解决方案工作,直觉告诉我,由于混合了@EnableReactiveFeignClients,它甚至无法运行@ 和
@EnableFeignClients 需要对应的 @EnableWebFlux 或 @EnableWebMvc,因此定义两者可能会编译但会在运行时失败。
由于 op 没有提及目标语言,我想分享适用于我的 Kotlin 设置:
build.gradle.kts
implementation("org.springframework.boot:spring-boot-starter-webflux")
implementation("com.playtika.reactivefeign:feign-reactor-core:2.0.22")
implementation("com.playtika.reactivefeign:feign-reactor-spring-configuration:2.0.22")
implementation("com.playtika.reactivefeign:feign-reactor-webclient:2.0.22")
Config.kt
@Configuration
@EnableWebFlux
@EnableReactiveFeignClients
class Config {
}
MyEntity.kt
class MyEntity @JsonCreator constructor(
@param:JsonProperty("my_value") val my_value: String
)
MyFeignClient.kt
@Component
@ReactiveFeignClient(
url = "\${package.service.my-service-url}",
name = "client"
)
interface MyFeignClient {
@GetMapping(value = ["/my/url?my_param={my_value}"], consumes = ["application/json"])
fun getValues(
@PathVariable(name = "my_value") myValue: String?,
): Mono<MyEntity?>?
}
然后这里是一些服务类中的代码:
val myClient: MyFeignClient = WebReactiveFeign.builder<MyFeignClient>()
.contract(ReactiveContract(SpringMvcContract()))
.target(MyFeignClient::class.java, "http://example.com")
// feel free to add .block() to get unpacked value or just chain your logic further
val response = myClient.getValues(param)