使用Spring Cloud Feign调用RESTful API(二)

2023-04-08 08:41:34 浏览数 (2)

配置Feign

在默认情况下,Feign会使用Java原生的HttpURLConnection发送HTTP请求。但是,我们可以通过配置来改变这个行为。例如,我们可以使用OkHttp作为HTTP客户端,可以设置超时时间和重试次数等。下面是一个示例:

代码语言:javascript复制
@Configuration
public class FeignConfig {

    @Bean
    public OkHttpClient okHttpClient() {
        return new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
                .retryOnConnectionFailure(true)
                .build();
    }

    @Bean
    public Feign.Builder feignBuilder() {
        return Feign.builder().client(new OkHttpClient());
    }
}

在上面的示例中,我们定义了一个名为FeignConfig的配置类,并通过@Bean注解定义了两个Bean:OkHttpClient和Feign.Builder。其中,OkHttpClient用于配置HTTP客户端,Feign.Builder用于构建Feign客户端。

集成Eureka和Ribbon

最后,我们可以使用Spring Cloud的Eureka和Ribbon来实现服务发现和负载均衡。通过在UserClient接口上使用@FeignClient注解来绑定服务,Feign将使用Ribbon进行负载均衡,并通过Eureka进行服务发现。下面是一个示例:

代码语言:javascript复制
@FeignClient(name = "user-service")
public interface UserClient {

    @GetMapping("/users/{id}")
    User getUser(@PathVariable("id") int id);

    @PostMapping("/users")
    User createUser(@RequestBody User user);

    @PutMapping("/users/{id}")
    User updateUser(@PathVariable("id") int id, @RequestBody User user);

    @DeleteMapping("/users/{id}")
    void deleteUser(@PathVariable("id") int id);
}

在上面的示例中,我们将UserClient绑定到名为user-service的服务上。这里的user-service是Eureka中注册的一个服务。通过在application.yml或application.properties文件中配置Eureka和Ribbon,就可以实现服务发现和负载均衡。下面是一个示例:

代码语言:javascript复制
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ipAddress}:${server.port}

ribbon:
  eureka:
    enabled: true

spring:
  application:
    name: feign-example

在上面的示例中,我们配置了Eureka和Ribbon,将服务注册到Eureka上,并将负载均衡交给Ribbon处理。

0 人点赞