SpringCloud + Zookeeper + Feign整合及Feign原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud + Zookeeper + Feign整合及Feign原理相关的知识,希望对你有一定的参考价值。

参考技术A Spring Cloud 与 Zookeeper的整合只需要添加相关的starter依赖和增加相关注解即可完成。

pom.xml 如下:

bootstrap.yml 如下:

最后开启服务的注册与发现

service 和controller实现

笔者加入了swagger,如果需要只需加入如下依赖和配置:

至此,spring cloud与zookeeper的整合就完成了,调用结果如下:

为了测试与Feign的整合,再构建一个消费者:与上述构建的过程类似。

pom.xml 增加spring-cloud-starter-openfeign依赖

bootstrap.yaml:

开启服务注册与发现,@EnableFeignClients注解注册FeignClient

@FeignClient注册声明定义FeignClient,笔者以两种方式定义了两个FeignClient:

1.通过请求路径定义FeignClient

2.通过生产者(即上述构建的helloService)暴露出来的接口定义FeignClient

controller 测试:

测试结果如下:

知道了如何将SpringCloud, Zookeeper 和Feign进行整合,我们知道了怎么使用,更重要的是要知道里面的原理,做到知其然更要知其所以然。

通过上述对整合过程的描述中可以发现,@EnableFeignClients和@FeignClient两个注解是将Feign整合进Spring Cloud的重要组成部分,因此,从这两个注解入手来了解Feign。

@EnableFeignClients注解通过@Import引入了FeignClientsRegistrar进行feign客户端的注册, 同时FeignClientsRegistrar通过实现ImportBeanDefinitionRegistrar来将bean注册spring容器中:

至此,我们知道了通过@EnableFeignClients和@FeignClient两个注解以及其相关属性,在服务启动时,将每个feign client 以及其对应的配置和每个客户端通用的配置以bean的方式注册完到spring容器中。

当使用@Autowired注解自动注入FeignClient时,Spring容器会使用注册FeignClient用到的FeignClientFactoryBean为其生成FeignClient实例。

默认使用的targeter是HystrixTargeter,根据builder的类型设置不同的属性,并生产Feign client

从上面的分析可以得出,当服务启动时,通过@EnableFeignClients注解,启动对标注了@FeignClient注解的类进行扫描和注册,通过FeignClientFactoryBean将FeignClient注册到Spring容器中。当使用@Autowired注解进行自动注入时,注册到Spring容器中FeignClient会以动态代理的形式注入,这些动态代理中包含了接口方法的methodHandler用以处理调用转发。

SpringCloud整合Zookeeper代替Eureka

以上是关于SpringCloud + Zookeeper + Feign整合及Feign原理的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud整合Zookeeper代替Eureka

SpringCloud Hoxton——Zookeeper服务注册与发现

SpringCloud Hoxton——Zookeeper服务注册与发现

SpringCloud用Zookeeper做服务注册与发现中心代码实现

springcloud05——Zookeeper实现支付微服务

Springcloud 的Eureka和ZooKeeper比较