kotlin FeignClient错误:url值不能是绝对的

6jjcrrmo  于 2022-12-13  发布在  Kotlin
关注(0)|答案(2)|浏览(1090)

启动SpringBootApplication时出现错误:Unexpected exception during bean creation; nested exception is java.lang.IllegalArgumentException: url values must be not be absolute.
我是一个初学者是SpringCloud,但我曾与Openshift(在第一次看它基本上是相同的东西).
我有一个集群,其中有GatewayApplication和一些商业微服务,在Kotlin上写道。在集群内部,微服务通过FeignClient进行通信,而不需要身份验证。在消费者服务中,它看起来像这样:

@FeignClient(name = "producer-service")
@Headers("Content-Type: application/json")
interface MarketServiceFeign {

    @GetMapping("https://somehost.ru/{id}/orders")
    fun getUserDevices(
            @PathVariable id: String,
    ): ResponseEntity<List<UserOrder>>

}

我试着找到同样的案例,但找不到。
我竭力想:

  • 从伪核心使用@RequestLine,但它不能与@FeignClient一起使用
  • 使用faign.@Param作为参数,而不是org.springframework.web.bind.annotation.@PathVariable
  • 使用url和http代替https
yhived7q

yhived7q1#

我没有考虑到的一点是FeignClient是按名称而不是按主机进入集群的服务的。

@FeignClient(name = "producer-service")
@Headers("Content-Type: application/json")
interface MarketServiceFeign {
    @GetMapping("/{id}/orders")
    fun getUserDevices(
            @PathVariable id: String
    ): ResponseEntity<List<UserDevice>>
}

我的理解是,https://somehost.ruFeignClient使用服务名称“producer-service”而不是“www.example.com“。FeignClient的结果URL是“producer-service/{id}/orders”。
我希望这能帮助到一些人。

bvhaajcl

bvhaajcl2#

如果你想使用一个绝对URL而不是负载平衡,你需要通过@FeignClient注解中的url属性来传递它。它将是每个Feign客户端的一个URL,所以你不能通过@RequestMapping注解来传递它。你只能使用它们来提供跟随主机url的路径段。如果你没有在@FeignClient中传递url,name将被用作serviceId来获取该服务的所有示例(例如,从服务注册表),并且将在幕后执行负载平衡以选择向其发送请求的示例。

相关问题