13.Dubbo服务降级与整合Hystrix实现断路器

一、服务降级

什么是服务降级?

当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。

通过Dubbo-Admin控制台进行操作

可以通过服务降级功能临时屏蔽某个出错的非关键服务,并定义降级后的返回策略。

向注册中心写入动态配置覆盖规则:

RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();

Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181"));

registry.register(URL.valueOf("override://0.0.0.0/com.foo.BarService?category=configurators&dynamic=false&application=foo&mock=force:return+null"));

 

其中:

  1. mock=force:return+null 表示消费方对该服务的方法调用都直接返回 null 值,不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。
  2. 还可以改为 mock=fail:return+null 表示消费方对该服务的方法调用在失败后,再返回 null 值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。

二、整合hystrix

Hystrix 旨在通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能。

演示代码,只显示重要部分,全部代码文章末尾有代码下载地址

2.1新建Maven项目

13.Dubbo服务降级与整合Hystrix实现断路器_第1张图片

2.2dubbo-spring-boot-hystrix 

2.2.1pom.xml


	4.0.0
	org.niugang
	dubbo-spring-boot-hystrix
	0.0.1-SNAPSHOT
	pom
	
	
		
			
			
				org.springframework.boot
				spring-boot-dependencies
				2.0.3.RELEASE
				pom
				import
			
			
			
				org.springframework.cloud
				spring-cloud-dependencies
				Finchley.SR1
				pom
				import
			
		
	
	
		dubbo-spring-boot-hystrix-api
		dubbo-spring-boot-hystrix-provider
		dubbo-spring-boot-hystrix-consumer
	

2.3dubbo-spring-boot-hystrix-provider

2.3.1pom.xml


	4.0.0
	
		org.niugang
		dubbo-spring-boot-hystrix
		0.0.1-SNAPSHOT
	
	dubbo-spring-boot-hystrix-provider
	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
		
			com.alibaba.boot
			dubbo-spring-boot-starter
			0.2.0
		

		
			org.niugang
			dubbo-spring-boot-hystrix-api
			0.0.1-SNAPSHOT
		

		
		
			redis.clients
			jedis
		
		
		
			org.springframework.cloud
			spring-cloud-starter-netflix-hystrix
		
	

2.3.2 对外暴露RPCs实现类

package org.niugang.service;

import java.util.Random;

import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;

/**
 * 
 * @ClassName: DefaultDemoService
 * @Description:对外暴露接口实现类
 * @author: niugang
 * @date: 2018年8月17日 下午7:50:47
 * @Copyright: [email protected]. All rights reserved.
 *
 */
// demo.service.version 在application.properties中配置过了
@Service // dubbo注解
@Component
@Service // dubbo注解
@Component
public class DefaultServiceImpl implements DefaultApiService {

	@HystrixCommand(commandProperties = {
			@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
			@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000") })
	public String defaultMethod(String str) {
		/*
		 * Hystrix超时配置的为2s,当实现类睡眠超过2s,服务调用者将执行服务降级函数
		 */
		int nextInt = new Random().nextInt(4000);
		System.out.println("sleep " + nextInt + "ms");
		try {
			Thread.sleep(nextInt);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return "HELLO  " + str + " from Dubbo Spring Boot";
	}

}

2.4 dubbo-spring-boot-hystrix-consumer

2.4.1 pom.xml


	4.0.0
	
		org.niugang
		dubbo-spring-boot-hystrix
		0.0.1-SNAPSHOT
	
	dubbo-spring-boot-hystrix-consumer
	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			com.alibaba.boot
			dubbo-spring-boot-starter
			0.2.0
		
		
		
			redis.clients
			jedis
		
		
		
			org.niugang
			dubbo-spring-boot-hystrix-api
			0.0.1-SNAPSHOT
		
		
		
			org.springframework.cloud
			spring-cloud-starter-netflix-hystrix
		
	

2.4.2调用服务提供者

	/**
	 * 引入服务提供者
	 */
	// com.alibaba.dubbo.config.annotation.Reference
	@Reference
	private DefaultApiService demoService;

	@RequestMapping("/sayHello")
	@HystrixCommand(fallbackMethod = "failBackMethod")
	public String sayHello(@RequestParam String name) {
		return demoService.defaultMethod(name);
	}

	/**
	 * 服务降级
	 * @param name
	 * @return
	 */
	public String failBackMethod(String name) {
		return "service request fail";
	}

5.结果

5.1成功调用

5.2失败调用

6.源码

https://gitee.com/niugangxy/dubbo

  

微信公众号

                          

你可能感兴趣的:(Dubbo,Dubbo)