JavaEE:SpringCloud-使用Feign调用微服务

一、导入SpringCloud与SpringBoot依赖包(必须版本对应,此处为2.2.x <-> Hoxton):

见此文章第一章:JavaEE:SpringCloud-使用Eureka发布微服务_a526001650a的专栏-CSDN博客

二、给被调用Module中配置微服务名称,在被调用Module工程/application.yml文件中:

spring:
  application:
    name: mall-usercenter #配置被调用微服务的名称

三、使用Feign调用微服务(在调用者Module中配置):

1.导入Feign依赖包、Eureka的Client端依赖包、Web功能依赖包:

<dependencies>
    <!-- 导入Feign依赖包 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!-- 导入Eureka的Client端依赖包 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!-- 导入Web功能依赖包 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2.导入Eureka Server配置的地址,否则无法发现服务:

spring:
  application:
    name: mall-feign #配置当前微服务名称
server: #配置当前微服务端口号
  port: 10002

eureka: #导入Eureka Server配置的地址,否则无法发现服务
  client:
    service-url:
      defaultZone: http://127.0.0.1:10000/eureka/

feign:  #feign超时配置优先级高于Ribbon超时配置
  client:
    config:
      default:
        connectTimeout: 1000  #连接超时时间,此处为1000毫秒
        readTimeout: 3000     #业务处理超时时间,此处为3000毫秒
      #微服务名称:  #此处改成具体服务名,配置某个微服务的超时时间,优先级高过default配置
        #connectTimeout: 1000  #连接超时时间,此处为1000毫秒
        #readTimeout: 3000     #业务处理超时时间,此处为3000毫秒
  compression:  #其他配置
    request:
      enabled: true #打开请求数据压缩
      mime-types: text/html,application/xml,application/json #需要压缩的数据类型
      min-request-size: 1024  #设置触发数据压缩的最小容量
    response:
      enabled: true #打开响应数据压缩

3.在Application启动类上添加Feign注解:

@SpringBootApplication //标识为启动类
@EnableDiscoveryClient //发现微服务
@EnableFeignClients    //用Feign方式调用
public class FeignApplication {
    public static void main(String[] args) {
        SpringApplication.run(FeignApplication.class);//加载启动类
    }
}

4.添加Feign调用接口(调用配置了EurekaClient端的微服务Module):

@FeignClient("mall-usercenter") //配置被调用的微服务名称(不能有下划线)
public interface UserCenterClient {
    //请求路径为:http://127.0.0.1:10001/getUserDetail/xxx ,userNo是参数值
    @RequestMapping(value = "getUserDetail/{userNo}", method = RequestMethod.GET)
    String getUserDetail(@PathVariable("userNo") String userNo); // @PathVariable用于将{userNo}的值取出,赋值给userNo
}

5.测试调用,创建请求处理类:

@Controller
public class UserAPIController {
    @Autowired
    private UserCenterClient uerCenterClient;
    //请求路径:http://127.0.0.1:10002/getUserDetailAPI/1001,userNo是参数值
    @RequestMapping(value = "getUserDetailAPI/{userNo}", method = RequestMethod.GET)
    @ResponseBody // @ResponseBody将返回对象转换为json字符串
    public String getUserDetailAPI(@PathVariable("userNo") String userNo) {// @PathVariable用于将{userNo}的值取出,赋值给userNo
        String json = uerCenterClient.getUserDetail(userNo);
        System.out.println("从用户中心微服务获取的值, json: " + json);
        return json;
    }
}

四、在Feign中配置Hystrix:

开启feign下的Hystrix功能,在调用者Module工程/application.yml文件中:

feign:
  hystrix: #开启feign下的Hystrix功能
    enabled: true

1.方式1:

(1)新增Feign接口的实现类,实现降级方法:

@Component//Hystrix降级实现类
public class UserCenterClientImpl implements UserCenterClient {
    @Override
    public String commonFallback(String userNo) {//Hystrix降级方法
        return "触发Hystrix降级方法";
    }
}

(2)在Feign接口中配置fallback为上面实现类:

@FeignClient(value = "mall-usercenter", fallback = UserCenterClientImpl.class) //fallback配置实现类
public interface UserCenterClient {
    //...
}

 2.方式2:

(1)新增FallbackFactory实现类:

@Component
public class MyFallbackFactory implements FallbackFactory<UserCenterClient> {//配置在@FeignClient(fallbackFactory = MyFallbackFactory.class)中
    @Override
    public UserCenterClient create(Throwable throwable) {
        return new UserCenterClient() {//实现接口
            //...降级方法实现
        };
    }
}

(2)在Feign接口中配置fallbackFactory属性为以上FallbackFactory实现类:

@FeignClient(value = "mall-usercenter", fallbackFactory = MyFallbackFactory.class) //fallbackFactory配实现类(MyFallbackFactory实现接口的降级方法)
public interface UserCenterClient {
    //...
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值