我是靠谱客的博主 自觉哈密瓜,最近开发中收集的这篇文章主要介绍SpringCloud-Feign-Ribbon断路器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

      • 0.准备
      • 1.Feign断路器
        • 1.1 pom.xml
        • 1.2 application配置
        • 1.3 application注解
        • 1.4服务申明
        • 1.5 服务测试接口
        • 1.6 运行测试
      • 2.Ribbon断路器
        • 2.1 pom.xml
        • 2.2 application配置
        • 2.3 application注解
        • 2.4服务申明
        • 2.5服务测试接口
        • 2.6运行测试

断路器对于一个应用服务器体系,是一个很重要的功能。从它的命名可以看出,它就像是电路系统里的保险丝,当超过负载时,保险丝会选择断开,这条路线就断开了,保护了这条路线的系统。
对于应用服务器也是如此。当单个节点出现异常,对于系统来说,最好的选择是不去选择这个节点。断路器应运而生。
断路器设置针对服务调用一方,这很好理解,不做记录。
断路器针对之前的Ribbon和Feign都可以实现。下面,分别针对这两种做断路器实现。

0.准备

打开之前的服务中心和服务提供者,如下所示(这里服务提供者就不双开,反正要断路,到时候要关掉):
在这里插入图片描述

1.Feign断路器

Feign默认已经带上断路器功能,你需要做的是打开配置。

1.1 pom.xml

新建一个项目,选择eureka discovery和feign

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>

1.2 application配置

spring:
  application:
    name: four-feign-hystrix
server:
  port: 8820
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8800/eureka/
##找不到也要配
feign:
  hystrix:
    enabled: true

可以看到我上面的注释,feign.hystrix.enabled找不到,但是需要配置上,feign断路功能才能打开。

1.3 application注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FourFeignHystrixApplication {

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

1.4服务申明

@FeignClient(name = "eureka-client", fallback = HiServiceHystrix.class)
public interface HiService {

    @RequestMapping("/hi")
    String hi(@RequestParam("name")String name);
}

同先前一样,通过FeignClient设置服务提供者,区别在于多了一个fallback。fallback是用来配置提供者调用不到,断路时,选择应急返回数据实现。如下所示:

@Component
public class HiServiceHystrix implements HiService{
    @Override
    public String hi(String name) {
        return "Sorry "+name;
    }
}

断路分三个状态?:关闭,半开,全开。关闭意味着断路完全没工作,全开意味着断路器彻底工作。

1.5 服务测试接口

@RestController
public class TestController {

    @Autowired
    private HiService hiService;

    @GetMapping("/hi/{name}")
    public String index(@PathVariable("name")String name) {
        return hiService.hi(name);
    }

}

1.6 运行测试

好了,运行这个Feign,此时如下:
在这里插入图片描述
访问http://localhost:8820/hi/Steven
Hi Steven, I’m from port : 8810

接着,关闭eureka-client服务提供者这个节点
在这里插入图片描述
再访问http://localhost:8820/hi/Steven
Sorry Steven

到此,Feign断路器搭建完成。

2.Ribbon断路器

Ribbon断路实现相对于Feign稍微复杂点,因为它没有断路功能,需要额外引入库。

2.1 pom.xml

新建springboot项目,勾选eureka discovery,ribbon和hystrix

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
		</dependency>

2.2 application配置

spring:
  application:
    name: four-ribbon-hystrix
server:
  port: 8820
eureka:
  client:
      serviceUrl:
        defaultZone: http://localhost:8800/eureka/

2.3 application注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
public class FourRibbonHystrixApplication {

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

	@Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}
}

在ribbon配置基础上,增加了@EnableHystrix注解,打开hystrix断路功能。

2.4服务申明

@Service
public class HelloService {

    @Autowired
    private RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "hiError")
    public String hiService(String name) {
        return restTemplate.getForObject("http://eureka-client/hi?name="+name, String.class);
    }

    public String hiError(String name) {
        return "hi, "+name+", sorry, error!";
    }
}

在原先的基础上增加了@HystrixCommand(fallbackMethod = “hiError”)和hiError方法实现。
HystrixCommand指明了断路时,应急的方法调用。

2.5服务测试接口

@RestController
public class HelloController {

    @Autowired
    private HelloService helloService;

    @GetMapping("/hi")
    public String hi(String name) {
        return helloService.hiService(name);
    }
}

2.6运行测试

运行Ribbon版断路实现应用,如下:
在这里插入图片描述
访问http://localhost:8820/hi?name=Steven
Hi Steven, I’m from port : 8810

关闭eureka-client服务提供者
在这里插入图片描述
此时再访问http://localhost:8820/hi?name=Steven
hi, Steven, sorry, error!

至此,Feign和Ribbon的断路都实现了。

最后

以上就是自觉哈密瓜为你收集整理的SpringCloud-Feign-Ribbon断路器的全部内容,希望文章能够帮你解决SpringCloud-Feign-Ribbon断路器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部