对假客户端的反应式支持

Cha*_*hra 6 spring microservices spring-cloud spring-cloud-feign spring-webflux

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

1)是否选择基于注解的控制器或功能路由器?2) 是否支持反应式假装客户端?

请帮忙。

yev*_*tsy 6

您可以检查这个库: https: //github.com/Playtika/feign-reactive

Feign 在 Spring WebClient 上的实现。为您带来两个世界的优点:使用 Feign 的简洁语法在 Spring WebClient 的快速、异步和非阻塞 HTTP 客户端上编写客户端 API


im_*_*ous 6

我发现这个问题不完整,没有关于如何设置的正确使用示例。

由于 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")
Run Code Online (Sandbox Code Playgroud)

配置文件

@Configuration
@EnableWebFlux
@EnableReactiveFeignClients
class Config {
}
Run Code Online (Sandbox Code Playgroud)

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?>?
}
Run Code Online (Sandbox Code Playgroud)

然后这里是一些服务类中的代码:

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)
Run Code Online (Sandbox Code Playgroud)