SpringClould,Feign中使用断路器遇到的问题,无法访问服务,一直进入到熔断错误方法中代码如下
package com.zntg.serviceribbon.service; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; /** * @description: 测试类HelloService,通过之前注入ioc容器的restTemplate来消费service-hi服务的“/hi”接口, * 在这里我们直接用的程序名替代了具体的url地址,在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名 * @author: zhengyunfei * @create: 2018-07-03 09:18 **/ @Service public class HelloService { @Autowired RestTemplate restTemplate; /** * @Description: 加上@HystrixCommand注解。该注解对该方法创建了熔断器的功能, * 并指定了fallbackMethod熔断方法,熔断方法直接返回了一个字符串,字符串为”hi,”+name+”,sorry,error!”, * @Author: zhengyunfei * @Date: 2018/7/3 * @time:14:49 */ @HystrixCommand(fallbackMethod = "hiError") public String hiService(String name) { return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class); } /* *熔断返回方法 */ public String hiError(String name) { return "hi,"+name+",sorry,error!"; } }
controller类
package com.zntg.serviceribbon.web; import com.zntg.serviceribbon.service.HelloService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * @program: zntg_clould_v1 * @description: * @author: zhengyunfei * @create: 2018-07-03 09:19 **/ @RestController public class HelloControler { @Autowired HelloService helloService; @RequestMapping(value = "/hi") public String hi(@RequestParam String name){ return helloService.hiService(name); } }
启动类
package com.zntg.serviceribbon; /** *ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。 *ribbon 已经默认实现了这些配置bean: *IClientConfig ribbonClientConfig: DefaultClientConfigImpl *IRule ribbonRule: ZoneAvoidanceRule *IPing ribbonPing: NoOpPing *ServerList ribbonServerList: ConfigurationBasedServerList *ServerListFilter ribbonServerListFilter: ZonePreferenceServerListFilter *ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer **/ 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; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.netflix.hystrix.EnableHystrix; import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; //服务消费者,通过@EnableDiscoveryClient向服务中心注册 //加@EnableHystrix注解开启Hystrix /** * @Description: Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。在这一篇文章首先讲解下基于ribbon+rest。 * @Author: zhengyunfei * @Date: 2018/7/3 * @time:14:42 */ @SpringBootApplication @EnableDiscoveryClient @EnableHystrix public class ServiceRibbonApplication { public static void main(String[] args) { SpringApplication.run(ServiceRibbonApplication.class, args); } //向程序的ioc注入一个bean: restTemplate; //通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。 @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } }
pom文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="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"> <modelVersion>4.0.0</modelVersion> <groupId>com.zztg</groupId> <artifactId>service-ribbon</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>service-ribbon</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <!-- <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> --> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>
2个服务可以正常访问
DS Replicas Instances currently registered with Eureka Application AMIs Availability Zones Status SERVICE-HI n/a (2) (2) UP (2) - PF0UGUFV.ylcaifu.com:service-hi:8762 , PF0UGUFV.ylcaifu.com:service-hi:8763
浏览器访问
http://localhost:8764/hi?name=forezp
一直进hiError方法
最后修改pom文件就好了
修改后的pom文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="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"> <modelVersion>4.0.0</modelVersion> <groupId>com.zztg</groupId> <artifactId>service-ribbon</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>service-ribbon</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <!-- <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> --> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>
在启动就可以正常访问到服务了
hi forezp,i am from port:8762
hi forezp,i am from port:8763
pom差异
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>修改前
<artifactId>spring-cloud-starter-eureka-server</artifactId>修改后
相关推荐
在实际项目实战中,"Eureka、feign熔断"可能涉及到Hystrix组件,Hystrix是Netflix开源的一个断路器库,用于处理服务之间的延迟和故障,防止级联失败,提高系统的弹性。在Feign中集成Hystrix,可以实现服务调用的熔断...
SpringBoot 使用 Feign 实现远程接口调用和错误熔断 Feign 是一种基于 Java 的声明式 Web 服务客户端,SpringBoot 通过 Feign 可以轻松地实现远程接口调用和错误熔断。在本文中,我们将详细介绍如何使用 Feign 实现...
在IT行业中,熔断机制是微服务架构中一个至关重要的组件,它主要用于保护系统免受过载的影响,防止服务雪崩。本示例主要讲解如何使用Resilience4j这一库来为现有的Java代码实现熔断功能。Resilience4j是一个轻量级...
Spring Cloud Feign是Spring Cloud生态系统中的一个组件,它作为一个声明式的服务调用客户端,使得编写Web服务客户端变得简单。Feign的设计灵感来源于Netflix的Feign库,它的主要目的是简化微服务之间的通信,使得...
另外,Feign还支持Hystrix断路器,可以在服务不可用时提供保护,避免服务雪崩。 这个"Feigndemo02"可能包含了实现以上功能的示例代码,包括服务提供者和服务消费者端的配置、接口定义以及实际调用。通过分析这些...
【Spring Cloud Feign服务使用详解】 在分布式系统中,服务间的通信是至关重要的,Spring Cloud Feign就是一种声明式的服务调用工具,它使得服务之间的调用变得简单且直观。Feign是Netflix开源的一个接口绑定工具,...
1. **熔断**:当调用的服务出现异常或响应时间过长时,断路器会切换到“熔断”状态,不再向故障服务发送请求,而是直接返回一个备用响应(通常是错误信息或默认值),以此减少系统的延迟和资源消耗。 2. **短路**:...
【SpringCloud Hystrix服务熔断】是Spring Cloud生态中的一种关键组件,它引入了断路器模式,用于处理微服务架构中可能出现的雪崩效应。断路器模式的核心思想是在服务之间设置“保险丝”,当某个服务出现故障时,...
它提供断路器模式,当服务不可用或者响应时间过长时,断路器打开,后续请求会直接返回错误,而不是等待,从而避免了系统的雪崩效应。Hystrix 还提供了 fallback 机制,当服务调用失败时,可以返回默认值或执行备用...
Feign集成Hystrix实现服务熔断和服务降级案例Java代码
它通过定义接口并使用注解来简化服务间的调用,使得客户端调用远程服务就像调用本地方法一样简单。在"feign-consumer"的例子中,我们将深入探讨如何创建和使用Feign客户端。 1. **Feign基础概念** - **Feign接口**...
下面我们将详细探讨如何在Spring Cloud中使用Feign,以及涉及到的相关知识点。 首先,我们要了解Feign的基本概念。Feign是一个构建在HTTP客户端之上的声明式Web服务客户端,它使得编写Web服务客户端就像编写服务器...
在 Ribbon 中配置 Hystrix,你需要创建一个 HystrixCommand 或者 HystrixObservableCommand 类型的实例,然后在服务调用中使用它。这样,一旦服务调用失败,断路器会自动打开,避免后续请求继续失败。 例如,你可能...
Spring Boot 实现的云应用开发工具包,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)操作的简单方法。...
Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得简单,而Hystrix则是一个用于处理延迟和故障的库,通过断路器模式来防止服务雪崩,确保系统的稳定。 **Feign简介** Feign是基于NetFlix的一个声明式...
本文将详细讲解如何在SpringCloud环境中使用Feign实现断路器功能,以及相关的搭建和测试过程。 首先,我们要理解SpringCloud Eureka,它是SpringCloud的一个子项目,主要功能是为分布式系统中的应用提供服务发现。...
例如,在微服务架构中,我们可以使用 Feign 来调用不同的服务,解决跨域请求的问题。 六、Feign 的优点 Feign 有很多优点,例如: * 简化了客户端的开发 * 提高了客户端的性能 * 可以解决跨域请求的问题 * 可以与...
2. **插件支持**:Feign支持多种插件,如Hystrix(用于服务降级和熔断)、Ribbon(负载均衡器)以及Zuul(API网关)。这些插件可以无缝集成到Feign中,为微服务架构提供更强大的功能。 3. **模板化调用**:Feign...
maven依赖 : <groupId>org.springframework.cloud <artifactId>spring-cloud-starter-...项目启动后 访问 http://127.0.0.1:8764/ 来实现项目接口调用 简单的demo 具备feign 接口调用 以及Hystrix简单熔断的功能