启动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
2条答案
按热度按时间yhived7q1#
我没有考虑到的一点是FeignClient是按名称而不是按主机进入集群的服务的。
我的理解是,https://somehost.ruFeignClient使用服务名称“producer-service”而不是“www.example.com“。FeignClient的结果URL是“producer-service/{id}/orders”。
我希望这能帮助到一些人。
bvhaajcl2#
如果你想使用一个绝对URL而不是负载平衡,你需要通过
@FeignClient
注解中的url
属性来传递它。它将是每个Feign客户端的一个URL,所以你不能通过@RequestMapping
注解来传递它。你只能使用它们来提供跟随主机url的路径段。如果你没有在@FeignClient
中传递url,name
将被用作serviceId
来获取该服务的所有示例(例如,从服务注册表),并且将在幕后执行负载平衡以选择向其发送请求的示例。