如何在Spring Boot微服务架构中高效管理多个WebClient配置?

问题描述 投票:0回答:1

我正在使用 Spring Boot 开发一个微服务项目,并且有多个服务需要相互通信。目前我有以下服务:

  • 员工服务
  • 部门服务
  • 项目服务。

在员工服务中,我需要使用 WebClient 从部门服务和项目服务调用端点。最初,我为每个服务创建了单独的 WebClient bean,如下所示:

@Autowired
private LoadBalancedExchangeFilterFunction filterFunction;

@Bean
public WebClient departmentWebClient() {
    return WebClient.builder()
            .baseUrl("http://department-service")
            .filter(filterFunction)
            .build();
}

@Bean
public DepartmentClient departmentClient() {
    HttpServiceProxyFactory httpServiceProxyFactory
            = HttpServiceProxyFactory
            .builder(WebClientAdapter.forClient(departmentWebClient()))
            .build();
    return httpServiceProxyFactory.createClient(DepartmentClient.class);
}

@Bean
public WebClient projectWebClient() {
    return WebClient.builder()
            .baseUrl("http://project-service")
            .filter(filterFunction)
            .build();
}

@Bean
public TaskClient taskClient() {
    HttpServiceProxyFactory httpServiceProxyFactory
            = HttpServiceProxyFactory
            .builder(WebClientAdapter.forClient(projectWebClient()))
            .build();
    return httpServiceProxyFactory.createClient(TaskClient.class);
}

虽然这可行,但随着服务数量的增加,它似乎效率低下且麻烦。如果可能的话,我正在寻找更好、更灵活的方法。 有人可以指导我实现这一目标的最佳方法(可能带有代码示例)吗?

java spring-boot configuration microservices backend
1个回答
0
投票

也许您应该使用像 open feign 这样的声明性休息客户端,您将有一个代表每个服务的接口以及所有端点,如下例所示:

@FeignClient(value = "jplaceholder", url = "https://jsonplaceholder.typicode.com/")
public interface JSONPlaceHolderClient {

    @RequestMapping(method = RequestMethod.GET, value = "/posts")
    List<Post> getPosts();

    @RequestMapping(method = RequestMethod.GET, value = "/posts/{postId}", produces = "application/json")
    Post getPostById(@PathVariable("postId") Long postId);
}

您将将此接口注入到您的服务中,然后只需从您注入的接口中调用方法即可。该接口中的每个方法都将代表您在其他微服务中的端点。您可以为每个微服务拥有一个假客户端。

© www.soinside.com 2019 - 2024. All rights reserved.