feign学习
前言
Feigin是一个声明式HTTP客户端,简化了远程调用,让编写HTTP客户端变得简单。
使用自定义接口,然后在上面添加注解,感知上就像调用一个接口一样。
Feign的简单实现
maven依赖
<!-- feign核心包 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
<version>10.4.0</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-jackson</artifactId>
<version>10.2.0</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>10.2.0</version>
</dependency>
请求接口
import com.feign.model.User;
import feign.Headers;
import feign.Param;
import feign.RequestLine;
public interface IService {
@RequestLine("GET /user/info?id={id}")
@Headers("Content-Type: application/json")
User userInfo(@Param(value = "id") String id);
}
配置类
import feign.Feign;
import feign.Logger;
import feign.Request;
import feign.Retryer;
import feign.httpclient.ApacheHttpClient;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FeignService {
@Bean
public IService getFeignService() {
return Feign.builder()
.client(new ApacheHttpClient())
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.logger(new Logger.NoOpLogger())
.logLevel(Logger.Level.FULL)
.retryer(Retryer.NEVER_RETRY)
.options(new Request.Options(1000, 3500))
.target(IService.class, "http://localhost:8080");
}
}
Controller
import com.feign.model.User;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/info")
@ResponseBody
public User info(@RequestParam("id") String id) {
return User.of().setId(id)
.setName("xixixi");
}
}
调用Test
import