文档章节

初步学习Hystrix

sumailhuhao
 sumailhuhao
发布于 2017/02/09 15:37
字数 602
阅读 18
收藏 0

介绍:

参考了http://www.tuicool.com/articles/AbiqEnn。比较详细的有介绍  这里只是演示一下demo。

初步学习了一下Hystrix。在大中型分布式系统中,通常系统很多依赖( HTTP ,hession,Netty,Dubbo)

在高并发访问下,这些依赖的稳定性与否对系统的影响非常大,但是依赖有很多不可控问题:如网络连接缓慢,资源繁忙,暂时不可用,服务脱机等.Hystrix就是用来解决这些问题的
这里框架用的是http://www.cnblogs.com/luxiaoxun/p/4887452.html博客里提供的基于zookeeper netty Protostuff的轻量级分布式rpc框架。

这里的版本

<dependency>
    <groupId>com.netflix.hystrix</groupId>
    <artifactId>hystrix-core</artifactId>
    <version>1.3.16</version>
</dependency>
<dependency>
    <groupId>com.netflix.hystrix</groupId>
    <artifactId>hystrix-metrics-event-stream</artifactId>
    <version>1.1.2</version>
</dependency>

提供服务的方面NettyRpcHuHaoSOA:

1.首先我们定义一个HelloPersonCommand 用来提供给服务端soa  服务前后调用的

package com.nettyrpc.test.Hystrix;

import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;
import com.netflix.hystrix.HystrixCommandProperties;

/**
 * Created by huhaosumail on 17/2/9.
 */
public class HelloPersonCommand extends HystrixCommand {

    private final String _name;
    public HelloPersonCommand(String  name) {
//        super(HystrixCommandGroupKey.Factory.asKey("HelloService"));
        super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("HelloService")).andCommandPropertiesDefaults(HystrixCommandProperties.Setter().withExecutionIsolationThreadTimeoutInMilliseconds(500)));
        //设置超市时间
        _name=new String(name);
    }

    @Override
    protected Object run() throws Exception {
        Thread.sleep(600);
        return String.format("Hello %s",_name);
    }

    @Override
    protected Object getFallback() {
        System.out.println("huhaoserver 超时");
        return "ss";
    }
}

2.首先我们提供一个被Hystrix包装的server的服务  例如HelloPersonServiceImpl的实现类

package com.nettyrpc.test.server;

import com.nettyrpc.server.RpcService;
import com.nettyrpc.test.Hystrix.HelloPersonCommand;
import com.nettyrpc.test.client.HelloPersonService;
import com.nettyrpc.test.client.Person;

import java.util.ArrayList;
import java.util.List;


@RpcService(HelloPersonService.class)
public class HelloPersonServiceImpl implements HelloPersonService {

    @Override
    public List<Person> GetTestPerson(String name, int num) {
        List<Person> persons = new ArrayList<>(num);
        for (int i = 0; i < num; ++i) {
            persons.add(new Person(Integer.toString(i), name));
        }
        //同步调用命令模式
        new HelloPersonCommand("ss").execute();
        return persons;
    }
}

客户端访问NettyRpcHuHaoSOA的HelloPersonService的服务时  

new HelloPersonCommand("ss").execute();

会去判断这个访问是否超过设定的超时时间  如果超时  调用 getfallBack方法。

访问的服务NettyRpcChenHaoSOA:

Test测试类

package com.nettyrpc.test.app;

import com.nettyrpc.client.RPCFuture;
import com.nettyrpc.client.RpcClient;
import com.nettyrpc.client.proxy.IAsyncObjectProxy;
import com.nettyrpc.test.client.HelloPersonService;
import com.nettyrpc.test.client.HelloService;
import com.nettyrpc.test.client.Person;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsEqual.equalTo;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:client-spring.xml")
public class HelloServiceTest {

    @Autowired
    private RpcClient rpcClient;


    @Test
    public void helloPersonTest(){
        HelloPersonService helloPersonService = rpcClient.create(HelloPersonService.class);
        int num = 5;
        List<Person>  persons = helloPersonService.GetTestPerson("xiaoming",num);
        List<Person> expectedPersons = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            expectedPersons.add(new Person(Integer.toString(i), "xiaoming"));
        }
        assertThat(persons, equalTo(expectedPersons));

        for (int i = 0; i<persons.size(); ++i){
            System.out.println(persons.get(i));
        }
    }
}

模拟超时访问服务端的被Hystrix包装的GetTestPerson方法。

步骤以及效果:

1.开启zksever

 

2.开启服务端服务

3.客户端模拟访问 查看客户端 服务端的控制台结果

 

 

 

© 著作权归作者所有

sumailhuhao
粉丝 10
博文 5
码字总数 5817
作品 0
普陀
程序员
私信 提问
教程:一起学习Hystrix--Hystrix入门

目录 获取hystrix库 "hello world" 构建hystrix 获取hystrix库 在 http://search.maven.org (国内访问较慢)找到hystrix关于 Maven, Ivy, Gradle等的二进制文件以及依赖信息。还可以通过 http...

java_龙
2018/05/12
1K
0
Spring Boot 集成 Hystrix

续: 《Hystrix介绍》 《Hystrix是如何工作的》 《SpringCloud学习笔记(3)——Hystrix》 Hystrix使用 1 package com.cjs.example; 2 3 import com.netflix.hystrix.HystrixCommand; 4 import......

不要乱摸
2018/07/31
0
0
SpringCloud 微服务 (十五) 服务容错 Hystrix

壹 工作中的微服务架构,某个服务通常会被多个服务调用或者多层调用完成需求,如果某个服务不可用,导致一个系统功能不可用或者服务直接没用了的情况,这种情况称为雪崩效应 有A服务调用B服务,B服...

___大侠
2018/07/20
154
0
Spring Cloud 2.x系列之断路器集群监控Turbine

前几篇已经实现了对单个服务实例的监控,当然在实际应用中,单个实例的监控数据没有多大的价值,我们其实更需要的是一个集群系统的监控信息,这时就需要引入Turbine。Turbine能够汇集监控信息...

技术小能手
2018/10/08
0
0
技术码霸阐述——Spring Cloud Netflix:熔断器:Hystrix Clients

Netfilix创建了一个名为Hystrix的库,实现了熔断器模式。在微服务架构中,它通常有多个服务调用层。 一: 微服务图 一个底层服务的故障会引发直至用户交互层的连锁故障。在一个设定时长为“m...

java知识分子
01/23
16
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
10
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0
PHP+Ajax微信手机端九宫格抽奖实例

PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现。支持可以设置中奖概率等。 奖品列表 <div class="lottery_list clearfix" id="lottery"> ......

ymkjs1990
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部