Spring Cloud之声明式调用Feign

一:Feign

  1. 简介
          Feign采用了声明式API接口的风格,将Java Http客户端绑定到它的内部。Feign将Java Http客户端调用
    过程变得简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解。
    Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。
          简而言之:
                     a:Feign 采用的是基于接口的注解
                     b:Feign 整合了ribbon,具有负载均衡的能力
                     c:整合了Hystrix,具有熔断的能力

二:Feign实例Demo

  1.   一个父的服务类chapter5-2,里面都是前面章节需要创建的一些Demo服务应用 
          Spring Cloud之声明式调用Feign_第1张图片
          pom.xml文件内容:
           
    
      4.0.0
      com.kgf
      chapter5-2
      1.0-SNAPSHOT
      pom
      chapter5-2
      
      
      
      	  org.springframework.boot
    	  spring-boot-starter-parent
    	  2.0.3.RELEASE
    	  
    	  
      
      
      
      	 UTF-8
      	 UTF-8
      	 1.8
      	 Finchley.RELEASE
      
      
      
      
      	
      	    
    	  		org.springframework.cloud
    		    spring-cloud-dependencies
    		    ${spring-cloud.version}
    		    pom
    		    import
      	    
      	
      
      
      	eureka-server
      	eureka-client
      	eureka-ribbon-client
      	eureka-feign-client
      
    

     

  2. 一个eureka-server服务应用,是用来服务注册的
        Spring Cloud之声明式调用Feign_第2张图片
        ⑴EurekaServerApplication.java启动类
               Spring Cloud之声明式调用Feign_第3张图片
        ⑵application.yml配置文件信息
               
    spring:
      profiles:
        active: dev  #这里我们默认启用dev环境
     
    ---
    spring:
      profiles: dev  #环境一
    server: 
      port: 8761
    eureka:
      instance:
        hostname: peer1  #环境一服务名
      client:
        register-with-eureka: false
        fetch-registry: false
          
    ---
    spring:
      profiles: test #环境二
    server:
      port: 8762
    eureka:
      instance:
        hostname: peer2  #环境二服务名
      client:
        service-url: #将peer2注册进入peer1
          defaultZone: http://peer1:8761/eureka/

        ⑶pom.xml文件内容
             
    
      4.0.0
      
        com.kgf
        chapter5-2
        1.0-SNAPSHOT
      
      eureka-server
      0.0.1-SNAPSHOT
      eureka-server
      
      
    	     
    	  	
    	  		org.springframework.cloud
    	  		spring-cloud-starter-netflix-eureka-server
    	  	
    	  	
    	  	  
    	  	
    	  		org.springframework.boot
    	  		spring-boot-starter-test
    	  		test
    	  	
      
      
      
      	  
      	         
      	  		
      	  			org.springframework.boot
    	  			spring-boot-maven-plugin
      	  		
      	  
      
    

     

  3.   一个eureka-client子服务,作为微服务的客户端,也就是微服务的提供者
        Spring Cloud之声明式调用Feign_第4张图片         
       ⑴EurekaClientApplication.java启动类
             Spring Cloud之声明式调用Feign_第5张图片
       ⑵bootstrap.yml配置文件,这个里面存在两个环境,我们到时候需要启动两个提供者服务 
             Spring Cloud之声明式调用Feign_第6张图片
       ⑶ HiController.java类
             Spring Cloud之声明式调用Feign_第7张图片
       ⑷pom.xml文件
             
    
      4.0.0
      
        com.kgf
        chapter5-2
        1.0-SNAPSHOT
      
      eureka-client
      0.0.1-SNAPSHOT
      eureka-client
      
       
    	     
    	  	
    	  		org.springframework.cloud
    	  		spring-cloud-starter-netflix-eureka-client
    	  	
    	  	
    	  		org.springframework.boot
    	  		spring-boot-starter-web
    	  	
    	  	  
    	  	
    	  		org.springframework.boot
    	  		spring-boot-starter-test
    	  		test
    	  	
       
       
       
      	  
      	         
      	  		
      	  			org.springframework.boot
    	  			spring-boot-maven-plugin
      	  		
      	  
      
    
  4.   一个eureka-feign-client子服务,用来负载均衡调用提供者
       Spring Cloud之声明式调用Feign_第8张图片
      ⑴application.yml配置文件
            Spring Cloud之声明式调用Feign_第9张图片
      ⑵EurekaFeignClientApplication.java启动类
            Spring Cloud之声明式调用Feign_第10张图片
      ⑶创建EurekaClientFeign.java接口类,用来对接eureka-client服务应用中的对外暴露的接口
           Spring Cloud之声明式调用Feign_第11张图片
      ⑷创建EurekaClientFeignService.java类
           Spring Cloud之声明式调用Feign_第12张图片
      ⑸创建EurekaClientFeignController.java类
           Spring Cloud之声明式调用Feign_第13张图片
      ⑹pom.xml配置文件
           
    
      4.0.0
      
        com.kgf
        chapter5-2
        1.0-SNAPSHOT
      
      eureka-feign-client
      eureka-feign-client
      
      
             
             
                org.springframework.cloud
                spring-cloud-starter-openfeign
            
             
                org.springframework.cloud
                spring-cloud-starter-netflix-eureka-client
            
            
    			org.springframework.boot
    			spring-boot-starter-web
    		
    		 
    			org.springframework.boot
    			spring-boot-starter-test
    			test
    		
      
    
     
  5. 依次启动eureka-server(8761端口),以及两个eureka-client(端口分别为8762,8763)服务,和最后一个eureka-feign-client服务(端口8765)
      Spring Cloud之声明式调用Feign_第14张图片
      第一次调用 eureka-feign-client服务中的web层hi接口:
       
      第二次调用:
       
  6. 总结Feign的相关实现
      a:首先通过在启动类上加上@EnableFeignClients注解开启Feign Client的功能。只有这个注解存在,
            才会在程序启动时开启对@FeignClient注解的包扫描,并且根据Feign的规则实现接口,并在接
            口上面加上@FeignClient注解
           Spring Cloud之声明式调用Feign_第15张图片
           Spring Cloud之声明式调用Feign_第16张图片
    b:程序启动后,会进行包扫描,扫描所有的@FeignClient的注解的类,并将这些信息注入IOC容器中。
    c:当接口的方法被调用时,通过JDK的代理来生成具体的RequestTemplate模板对象。
    d:根据RequestTemplate再生成Http请求的Request对象
    e:Request对象交给Client去处理,其中Client的网络请求框架可以是HttpURLConnection,HttpClient
          和OkHttp.
    f:最后Client被封装到LoadBalanceClient类,这个类结合Ribbon做到了负载均衡。

 

你可能感兴趣的:(SpringCloud,微服务,feign)