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>修改后
相关推荐
主要介绍了SpringBoot如何使用feign实现远程接口调用和错误熔断,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
springcloud对应具体服务提供方的feign在服务提供方定义,其他消费依赖方引入依赖,避免每个服务调用方都重复定义服务方的feign,参考项目实战代码
Redis作者说到:“灵活性被过分高估–>约束才是解放”。 –> 返回专栏总目录 <– 代码下载地址:https://github.com/f641385712/feign-learning 目录前言正文OkHttp使用示例源码解析Apache HttpClient使用示例...
SpringCloud——断路器(Hystrix)之Ribbon使用断路器和Feign使用断路器
maven依赖 : <groupId>org.springframework.cloud <artifactId>spring-cloud-starter-...项目启动后 访问 http://127.0.0.1:8764/ 来实现项目接口调用 简单的demo 具备feign 接口调用 以及Hystrix简单熔断的功能
本案例是Spring Cloud案例,使用Spring Boot作为微服务项目,项目主要是练习使用Feign组件
springcloud feign 服务消费者 类似 webservice ====== http://knight-black-bob.iteye.com/blog/2356222
feign+springboot的使用
赠送jar包:feign-core-10.12.jar; 赠送原API文档:feign-core-10.12-javadoc.jar; 赠送源代码:feign-core-10.12-sources.jar; 赠送Maven依赖信息文件:feign-core-10.12.pom; 包含翻译后的API文档:feign-core...
除了Feign自带的注解外它还支持JAX-RS注解,SpringCloud又为Feign增加了对SpringMVC注解的支持,同时为了能够使用和Spring Web中默认使用的相同的httpMessageConverter,SpringCloud集成了Ribbon和Eureka,用来在...
赠送jar包:feign-form-spring-3.8.0.jar; 赠送原API文档:feign-form-spring-3.8.0-javadoc.jar; 赠送源代码:feign-form-spring-3.8.0-sources.jar; 赠送Maven依赖信息文件:feign-form-spring-3.8.0.pom; ...
在分布式环境中,许多服务依赖项中的一些必然会失败。Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这...
我们在使用spring cloud时如果设置了oauth2授权模式,那么应用服务A再调用服务B时使用Feign请求会出现401授权认证的问题,那么解决办法就是在feign调用请求时获取到assessToken并设置到请求header中就可以解决这个...
Spring Cloud断路器Hystrix上文讲到我们服务间调用使用Feign——声明式Web服务客户端,在分布式系统中,一个服务很可能会调用多个其他微服务,
本篇文章主要介绍了详解spring cloud Feign使用中遇到的问题总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了spring cloud feign实现远程调用服务传输文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Spring Cloud中使用Feign,将feign框架整合到Spring Cloud之中,实现负载均衡等低耦合客户端
关于Feign和Hystrix断路器的概念知识,有兴趣的小伙伴们可以去https://blog.csdn.net/weixin_44364444/article/details/105969229看看。 microservice-consumer-emp-80-feign pom.xml 4.0.0 org.spring...
默认情况下,feign通过jdk中的HttpURLConnection向下游服务发起http请求,这种情况下,由于缺乏连接池的支持,在达到一定流量的后服务肯定会出问题.本指南详细介绍feign的实现以及优化