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做服务注册与发现中心代码实现