博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hystrix系列-4-Hystrix的动态配置
阅读量:6216 次
发布时间:2019-06-21

本文共 2417 字,大约阅读时间需要 8 分钟。

hot3.png

Hystrix默认使用来实现的动态配置,我们在上节中,使用了代码的方式来实现配置,这节,我们使用Hystrix的动态配置来实现。

1、实现一个Command,代码如下:

 

[java]  

  1. package com.example.demo.hystrix.command;  
  2.   
  3. import org.apache.http.HttpEntity;  
  4. import org.apache.http.client.methods.CloseableHttpResponse;  
  5. import org.apache.http.client.methods.HttpGet;  
  6. import org.apache.http.impl.client.CloseableHttpClient;  
  7. import org.apache.http.impl.client.HttpClients;  
  8. import org.apache.http.util.EntityUtils;  
  9.   
  10. import com.example.demo.utils.ObjectMapperInstance;  
  11. import com.example.demo.vo.User;  
  12. import com.fasterxml.jackson.databind.ObjectMapper;  
  13. import com.netflix.hystrix.HystrixCommand;  
  14. import com.netflix.hystrix.HystrixCommandGroupKey;  
  15. import com.netflix.hystrix.HystrixCommandKey;  
  16.   
  17. import lombok.Getter;  
  18.   
  19. /** 
  20.  * 只需要集成HystrixCommand即可,并覆写父类中的相应方法即可 
  21.  *  Administrator 
  22.  * 
  23.  */  
  24. public class UserHystrixCommond extends HystrixCommand<User>{  
  25.       
  26.     @lombok.Setter @ Getter private String id;  
  27.       
  28.     public UserHystrixCommond(String id) {  
  29.         super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("UserCommandGroup"))  
  30.                 .andCommandKey(HystrixCommandKey.Factory.asKey("userCommand")));  
  31.         this.id = id;  
  32.     }  
  33.   
  34.   
  35.     /** 
  36.      * 覆写run方法,此处写业务逻辑 
  37.      */  
  38.       
  39.     protected User run() throws Exception {  
  40.         System.out.println("command user: "+Thread.currentThread().getName()+"  is running......");  
  41.         CloseableHttpClient client = HttpClients.createDefault();  
  42.         HttpGet get = new HttpGet("http://localhost:7901/user/"+id);  
  43.         CloseableHttpResponse response = client.execute(get);  
  44.         HttpEntity entity = response.getEntity();  
  45.         String body = EntityUtils.toString(entity);  
  46.         ObjectMapper mapper = ObjectMapperInstance.getInstance();  
  47.         return mapper.readValue(body, User.class);  
  48.     }  
  49.       
  50.     /** 
  51.      * 服务降级方法,当调用服务发生异常时,会调用该降级方法 
  52.      */  
  53.       
  54.     protected User getFallback() {  
  55.         System.out.println("进入fallback方法!");  
  56.         User u = new User();  
  57.         u.setUsername("刘先生");  
  58.         u.setId(1l);  
  59.           
  60.         return u;  
  61.     }  
  62. }  

在application.properties配置文件中加入如下配置:

 

 

[java]  

  1. hystrix.command.userCommand.execution.isolation.strategy=SEMAPHORE //其中userCommand是我们在代码中设置的commandKey  

 

将隔离策略由默认改为的THREAD改为SEMAPHORE,然后跑下测试,我们发现,配置没有启作用,原因如下:

Archaius 默认支持两种方式来加载本地的配置文件:

1、默认情况下,Archaius默认会加载classpath下的config.properties文件

2、在程序启动的时候,加如下的启动参数

-Darchaius.configurationSource.additionalUrls=file:///apps/myapp/application.properties

 

下面,我们就来测试一下:

方式一:在src/main/resources下新建config.properties文件,并加入上面的配置

方式二:在启动程序的时候,添加如下的启动参数

再次测试就会发现,我们的动态配置生效了。

Hystrix支持的动态配置列表如下:

 

  1. http://blog.csdn.net/liuchuanhong1/article/details/73718483

 

转载于:https://my.oschina.net/xiaominmin/blog/1590726

你可能感兴趣的文章
HBTC2012 参会感受
查看>>
如何愉快的使用MQ-详述各种功能场景
查看>>
SQL查询语句中的 limit 与 offset 的区别
查看>>
hadoop SequenceFile介绍 大数据 存储
查看>>
手动订制一个基于BusyBox的微型Linux系统
查看>>
TCP/IP协议和Socket编程
查看>>
lnmp(new)
查看>>
使用fastjson时出现$ref: "$.list[2]"的解决办法(重复引用)
查看>>
ZooKeeper观察节点
查看>>
关系图报错"dataIndex undefined"
查看>>
[python] 各种ERROR
查看>>
利用Maven搭建Spring开发环境
查看>>
Swift重写set和get以及willSet和didSet介绍
查看>>
oracle分区表的迁移
查看>>
SpringCloud系列:整合Apollo实现分布式配置中心(一)
查看>>
log
查看>>
马哥20151224实战案例(练习)博客作业
查看>>
面试例题6:两种方法将图像显示在View上
查看>>
Android测试
查看>>
[Windows Azure] .NET Multi-Tier Application Using Storage Tables, Queues, and Blobs - 1 of 5
查看>>