如何让多个 Fe​​ignClient-s 使用相同的 serviceId/name?

mir*_*rec 5 spring spring-boot spring-cloud-feign feign openfeign

假设有 2 个端点:

@RequestMapping("/ep1")
interface Endpoint1 {
    @GetMapping("/echo")
    String echo();
}

@RequestMapping("/ep2")
interface Endpoint2 {
    @GetMapping("/echo")
    String echo();
}
Run Code Online (Sandbox Code Playgroud)

在后端,两者都在同一服务器中运行,该服务器在 Eureka 或 Consul 中注册为 serviceId="MY-SERVER" 或...

@RestController
public class Endpoint1Controller implements Endpoint1 {
    public String echo() {
        return "echo from Endpoint1"
    }
}
@RestController
public class Endpoint2Controller implements Endpoint2 {
    public String echo() {
        return "echo from Endpoint2"
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我的 2 个 FeignClients 必须共享相同的名称/serviceId 才能发现 Eureka/Consul 中的服务,但每个 feign 客户端的 serviceId 应该是唯一的!……这该怎么处理?

@FeignClient("MY-SERVER")
public interface Endpoint1Client extends Endpoint1 {
}

@FeignClient("MY-SERVER")
public interface Endpoint2Client extends Endpoint2 {
}


The bean 'MY-SERVER.FeignClientSpecification' could not be registered. A bean with that name has already been defined and overriding is disabled.
Run Code Online (Sandbox Code Playgroud)

在建议我将其加入单个接口之前,请考虑单个服务器/后端上可能有更多端点...

mir*_*rec 11

哦,我现在明白了!应该唯一的是contextId而不是值/名称

@FeignClient(name="MY-SERVER", contextId = "THIS-SHOULD-BE-UNIQUE")
Run Code Online (Sandbox Code Playgroud)