声明式调用---Feign

Feign:Feign是一种声明式、模板化的HTTP客户端。

用我的理解来说,Feign的功能类似dubbo暴露服务,但是与dubbo稍有不同的是Feign是HTTP REST接口的形式暴露的。

这一篇还是要利用到上一篇中的service(8762),service(8763)两个服务,先启动这两个服务。

新建项目,service-feign(8765),pom加入feign依赖,完整pom代码如下:

"1.0" encoding="UTF-8"?>
"http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.0.0

    com.dalaoyang
    springcloud_feign
    0.0.1-SNAPSHOT
    jar

    springcloud_feign
    springcloud_feign

    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.9.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
        Edgware.SR1
    

    
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.cloud
            spring-cloud-starter-feign
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                <type>pomtype>
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



复制代码

在启动类加入@EnableFeignClients注解,如果没有加入basePackages制定扫描包得话,默认会去找项目会扫描到的所有@FeignClient。启动类代码如下:

package com.dalaoyang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;


@SpringBootApplication
@EnableEurekaClient
//@EnableFeignClients(basePackages = "com.dalaoyang.interfaces")
@EnableFeignClients
public class SpringcloudFeignApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringcloudFeignApplication.class, args);
	}
}

复制代码

创建Feign暴露接口,接口上加入@FeignClient(value="service",fallback = FeignFallbackService.class) 注解。 service为要远程调用服务的名字,即你要调用服务的spring.application.name
fallback为远程调用失败后回调的方法。代码如下:

package com.dalaoyang.interfaces;

import com.dalaoyang.back.FeignFallbackService;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @author dalaoyang
 * @Description
 * @project springcloud_learn
 * @package com.dalaoyang.interfaces
 * @email [email protected]
 * @date 2018/4/20
 */
@FeignClient(value="service",fallback = FeignFallbackService.class)
//这里是要远程调用的服务的名称,即你要调用服务的spring.application.name
//fallback是远程调用失败回调的方法
public interface FeignInterface {
    @GetMapping("/")
    String IndexInfo();
}
复制代码

远程调用失败回调类FeignFallbackService,要实现对应的FeignClient实现对应的方法:

package com.dalaoyang.back;

import com.dalaoyang.interfaces.FeignInterface;
import org.springframework.stereotype.Service;

/**
 * @author dalaoyang
 * @Description
 * @project springcloud_learn
 * @package com.dalaoyang.back
 * @email [email protected]
 * @date 2018/4/20
 */
@Service
public class FeignFallbackService implements FeignInterface {
    @Override
    public String IndexInfo(){
        return "远程调用失败!";
    };
}
复制代码

最后看一下配置文件,需要注意的是feign.hystrix.enabled,如果配置远程调用回调的话需要声明一下Feign的 hystrix支持,不然页面还是会显示错误。

##端口号
server.port=8765

##服务名称
spring.application.name=service_feign

##注册中心地址
eureka.client.service-url.defaultZone=http://eureka.dalaoyang.cn/eureka/


##声明Feign的 hystrix支持
feign.hystrix.enabled=true
复制代码

启动service-feign(8765),先去看一眼http://eureka.dalaoyang.cn

可以看到服务注册成功,然后访问http://localhost:8765/,可以看到页面和使用ribbon的时候一样交替显示。

控制台

然后我们关闭service(8762),service(8763)两个服务,再次访问,可以看到

源码下载 :大老杨码云

个人网站:dalaoyang.cn

你可能感兴趣的:(声明式调用---Feign)