SpringCloud项目集成Feign、Hystrix过程解析

 更新时间:2019年11月30日 11:53:15   作者:差点点温柔  
这篇文章主要介绍了SpringCloud项目集成Feign、Hystrix过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了SpringCloud项目集成Feign、Hystrix过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Feign的功能:这是个消费者,根据服务注册在Eureka的ID去找到该服务,并调用接口

Hystrix的功能:熔断器,假如A服务需要调用B服务的/cities接口获取数据,那就在A服务的controller里声明@HystrixCommand,如果B服务的/cities接口挂了,就返回一个自定义的值

项目结构

[root@node01 cloud]# tree weather/
weather/
├── Application.java  #主程序启动入口
├── controller
│  ├── CityController.java  #控制路由,比如访问127.0.0.1:8080/cities, 这里调用cityClient方法
└── service
  └── CityClient.java    #具体方法的实现,这里就具体实现cityClient方法(interface)

Application.java

package com.waylau.spring.cloud.weather;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; #引入熔断器
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;  #让eureka能发现自己
import org.springframework.cloud.netflix.feign.EnableFeignClients;   #引入feign

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients  #声明这个程序引入FeignClient
@EnableCircuitBreaker #声明这个程序引入熔断器
public class Application {

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

controller/CityController.java

package com.waylau.spring.cloud.weather.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.waylau.spring.cloud.weather.service.CityClient; #引用service/CityClient.java

@RestController
public class CityController {
    @Autowired
    private CityClient cityClient;

    @GetMapping("/cities") #控制路由,比如访问127.0.0.1:8080/cities
    @HystrixCommand(fallbackMethod="defaultCities") #给另外一个服务设置hystrix熔断器,并声明fallbackMethod(回调方法)假如另外一个服务挂了,就调用defaultCities方法
    public String listCity() {
        // 通过Feign客户端来查找
        String body = cityClient.listCity();  #调用service里CityClient.java的cityClient方法,获取城市数据
        return body;              #返回,访问127.0.0.1:8080/cities就能返回城市数据
    }

    public String defaultCities() {        
        return "City Data Server is down!";
    }
}

service/CityClient.java(消费者)

用Feign去另一个接口获取数据

package com.waylau.spring.cloud.weather.service;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient("msa-weather-city") #msa-weather-city是msa-weather-city服务注册到eureka的ID,通过这个ID就能访问到msa-weather-city微服务
public interface CityClient {

    @GetMapping("/cities")  #调用msa-weather-city微服务里的/cities接口
    String listCity();    #调用msa-weather-city微服务里的/cities接口里的listCity()方法
}

application.properties

spring.application.name: micro-weather-eureka-client-feign-hystrix

eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/

feign.client.config.feignName.connectTimeout: 5000
feign.client.config.feignName.readTimeout: 5000

测试,条件为另一个服务可用时,我们是能调用的

测试.条件为另一个服务不可以时,我们是不能调用的,所以fallback

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解设计模式中的proxy代理模式及在Java程序中的实现

    详解设计模式中的proxy代理模式及在Java程序中的实现

    代理模式主要分为静态代理和动态代理,使客户端方面的使用者通过设置的代理来操作对象,下面来详解设计模式中的proxy代理模式及在Java程序中的实现
    2016-05-05
  • Java中Mybatis分页查询的四种传参方式

    Java中Mybatis分页查询的四种传参方式

    这篇文章主要介绍了Java中Mybatis分页查询的四种传参方式:顺序传参,@param传参,自定义POJO类传参,Map传参,想详细了解传参方式的小伙伴可以详细阅读本文,有一定的而参考价值
    2023-03-03
  • Java 9中的"菱形"语法详解

    Java 9中的"菱形"语法详解

    Java 9 再次增强了“菱形”语法,它甚至允许在创建匿名内部类时使用菱形语法,Java 可根据上下文来推断匿名内部类中泛型的类型,下面程序示范了在匿名内部类中使用菱形语法,感兴趣的朋友跟随小编一起看看吧
    2023-06-06
  • RestTemplate响应中如何获取输入流InputStream

    RestTemplate响应中如何获取输入流InputStream

    这篇文章主要介绍了RestTemplate响应中如何获取输入流InputStream问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • idea神级插件及如何安装Bito插件【Bito-ChatGPT】

    idea神级插件及如何安装Bito插件【Bito-ChatGPT】

    这篇文章主要介绍了介绍一款idea神级插件【Bito-ChatGPT】,Bito插件的强大之处在于它可以帮助开发人员更快地提交代码,同时还提供了一些有用的功能,如自动补全提交信息、快速查看历史记录等,需要的朋友可以参考下
    2023-04-04
  • java线程封闭之栈封闭和ThreadLocal

    java线程封闭之栈封闭和ThreadLocal

    这篇文章主要介绍了java线程封闭之栈封闭和ThreadLocal,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java 图解Spring启动时的后置处理器工作流程是怎样的

    Java 图解Spring启动时的后置处理器工作流程是怎样的

    spring的后置处理器有两类,bean后置处理器,bf(BeanFactory)后置处理器。bean后置处理器作用于bean的生命周期,bf的后置处理器作用于bean工厂的生命周期
    2021-10-10
  • idea新建mapper.xml文件详细步骤如:mybatis-config

    idea新建mapper.xml文件详细步骤如:mybatis-config

    这篇文章主要介绍了idea新建xml模板设置,例如:mybatis-config,本文分步骤通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • springBoot整合rabbitMQ的方法详解

    springBoot整合rabbitMQ的方法详解

    这篇文章主要介绍了springBoot整合rabbitMQ的方法详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 轻松掌握Java单例模式

    轻松掌握Java单例模式

    这篇文章主要帮助大家轻松掌握Java单例模式 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10

最新评论