首页 > 解决方案 > 对 feign cliint 的响应式支持

问题描述

我计划使用 spring webflux 将我的微服务从阻塞实现重构为反应式 API。我有几个疑问:

1)是否选择基于注释的控制器或功能路由器?2)是否有任何可用的响应式假装客户端支持?

请帮忙。

标签: springmicroservicesspring-cloudspring-webfluxspring-cloud-feign

解决方案


如果没有正确的使用示例来说明应该如何设置,我发现这个问题是不完整的。

由于 op 没有提到目标语言,我想分享适用于我的 Kotlin 设置:

构建.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")

配置文件

@Configuration
@EnableWebFlux
@EnableReactiveFeignClients
class Config {
}

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)

推荐阅读