gpt4 book ai didi

spring-boot - 我可以动态创建 Feign Client 或创建具有不同名称的实例吗

转载 作者:行者123 更新时间:2023-12-02 04:33:43 26 4
gpt4 key购买 nike

我定义了一个 REST 接口(interface),该接口(interface)具有使用不同 spring.application.name 的不同 Spring Boot 应用程序实现(spring.application.name 不能相同)在我的生意中)。

如何只定义一个Feign Client,并且可以访问所有SpringBootApplication REST服务?

SpringBootApplication A(spring.application.name=A) 和 B(spring.application.name=) 有这个 RestService:

@RestController
@RequestMapping(value = "/${spring.application.name}")
public class FeignRestService {

@Autowired
Environment env;

@RequestMapping(path = "/feign")
public String feign() {
return env.getProperty("server.port");
}
}

另一个 SpringBootApplication C:

@FeignClient(name="SpringApplication A or B")
public interface FeignClientService {

@RequestMapping(path = "/feign")
public String feign();
}

在SpringBootApplication C中,我想使用FeignClientService来访问A和B。你有什么想法吗?

最佳答案

是的,您可以创建一个 Feign 客户端,并根据需要重复使用它来多次调用 Eureka 目录中的不同命名服务(您用 spring-cloud-netflix 标记了问题)。以下是如何操作的示例:

@Component
public class DynamicFeignClient {

interface MyCall {
@RequestMapping(value = "/rest-service", method = GET)
void callService();
}

FeignClientBuilder feignClientBuilder;

public DynamicFeignClient(@Autowired ApplicationContext appContext) {
this.feignClientBuilder = new FeignClientBuilder(appContext);
}

/*
* Dynamically call a service registered in the directory.
*/

public void doCall(String serviceId) {

// create a feign client

MyCall fc =
this.feignClientBuilder.forType(MyCall.class, serviceId).build();

// make the call

fc.callService();
}
}

调整调用接口(interface)以满足您的要求,然后您可以将 DynamicFeignClient 实例注入(inject)并使用到需要使用它的 bean 中。

几个月来,我们一直在生产中使用这种方法来询问数十种不同的服务,以获取版本信息和其他有用的运行时执行器数据等内容。

关于spring-boot - 我可以动态创建 Feign Client 或创建具有不同名称的实例吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41739077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com