程序员的知识教程库

网站首页 > 教程分享 正文

Feign使用apache-httpclient做客户端进行服务调用

henian88 2024-10-20 05:51:25 教程分享 170 ℃ 0 评论

使用微服务做技术栈,spring-cloud提供了三种客户端的调用方式(结合我们公司的现状,目前使用的url的方式而非注册中心)。(spring-cloud的版本,1版本和2版本差异还是挺大的,需要具体分析)

<parent>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-parent</artifactId>
 <version>Dalston.SR4</version>
</parent>

对应的springboot的版本

<parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>1.5.7.RELEASE</version>
</parent>


如果要使用apache-httpclient作为客户端,对于springboot来说是非常简单的,只需要在pom里(默认使用maven进行管理)添加一下依赖就可以了。

<dependency>
 <groupId>io.github.openfeign</groupId>
 <artifactId>feign-httpclient</artifactId>
 <version>9.5.0</version>
</dependency>
首先从依赖树上来进行查看一下
[INFO] +- org.springframework.cloud:spring-cloud-starter-feign:jar:1.3.6.RELEASE:compile
[INFO] | +- org.springframework.cloud:spring-cloud-starter:jar:1.2.4.RELEASE:compile
[INFO] | | +- org.springframework.boot:spring-boot-starter:jar:1.5.7.RELEASE:compile
[INFO] | | | \- org.springframework.boot:spring-boot-starter-logging:jar:1.5.7.RELEASE:compile
[INFO] | | | \- org.slf4j:jul-to-slf4j:jar:1.7.25:compile
[INFO] | | +- org.springframework.cloud:spring-cloud-context:jar:1.2.4.RELEASE:compile
[INFO] | | \- org.springframework.security:spring-security-rsa:jar:1.0.3.RELEASE:compile
[INFO] | | \- org.bouncycastle:bcpkix-jdk15on:jar:1.55:compile
[INFO] | | \- org.bouncycastle:bcprov-jdk15on:jar:1.55:compile
[INFO] | +- org.springframework.cloud:spring-cloud-netflix-core:jar:1.3.5.RELEASE:compile
在org.springframework.cloud:spring-cloud-netflix-core:jar里我们看到



HttpClientFeignLoadBalancedConfiguration
这个类,直接贴源码分析
@Configuration
@ConditionalOnClass(ApacheHttpClient.class)
@ConditionalOnProperty(value = "feign.httpclient.enabled", matchIfMissing = true)
class HttpClientFeignLoadBalancedConfiguration {
 @Autowired(required = false)
 private HttpClient httpClient;
 @Bean
 @ConditionalOnMissingBean(Client.class)
 public Client feignClient(CachingSpringLoadBalancerFactory cachingFactory,
 SpringClientFactory clientFactory) {
 ApacheHttpClient delegate;
 if (this.httpClient != null) {
 delegate = new ApacheHttpClient(this.httpClient);
 } else {
 delegate = new ApacheHttpClient();
 }
 return new LoadBalancerFeignClient(delegate, cachingFactory, clientFactory);
 }
}
@Configuration:表明这是一个配置类
@ConditionalOnClass(ApacheHttpClient.class):表明依赖ApacheHttpClient这个类
feignclient这个方法其实最终返回的就是ApacheHttpClient 这个对象的实例了。
如此就直接使用ApacheHttpClient作为客户端了,比较简单。
这里顺便贴一下springboot2.0里代码
@Configuration
@ConditionalOnClass(ApacheHttpClient.class)
@ConditionalOnProperty(value = "feign.httpclient.enabled", matchIfMissing = true)
class HttpClientFeignLoadBalancedConfiguration {
 @Configuration
 @ConditionalOnMissingBean(CloseableHttpClient.class)
 protected static class HttpClientFeignConfiguration {
 private final Timer connectionManagerTimer = new Timer(
 "FeignApacheHttpClientConfiguration.connectionManagerTimer", true);
 private CloseableHttpClient httpClient;
 @Autowired(required = false)
 private RegistryBuilder registryBuilder;



这里更换了httpcliet的具体实现,这块以后有时间在进行详细的分析。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表