精华内容
下载资源
问答
  • java 服务降级开关设计思路

    千次阅读 2017-11-16 17:21:36
    java 服务屏蔽开关系统,可以手工降级服务,关闭服务 基于spring AOP机制,可以在特殊情况下屏蔽相关service类的某些返回,并且支持定义默认返回结果,随机屏蔽某些异常服务。 通过启动一个内置的http server来监听...
    
    java 服务屏蔽开关系统,可以手工降级服务,关闭服务 基于spring AOP机制,可以在特殊情况下屏蔽相关service类的某些返回,并且支持定义默认返回结果,随机屏蔽某些异常服务。 通过启动一个内置的http server来监听外部指令。

    对当前应用的影响。代码请查看 https://github.com/zhwj184/autoswitch

    使用指南:

    1.在spring配置文件中添加如下,其中switch-service-pointcut是添加紧急情况下需要屏蔽的方法列表

    <aop:config proxy-target-class="true"></aop:config>
    
    <bean id="switchInteceptor" class="org.autoswitch.SwitchInteceptor">
    </bean>
    <bean id="switch-service-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
        <property name="patterns">
            <list>
                <value>org.autoswitch.test.*</value>
            </list>
        </property>
    </bean>
    <aop:config>
        <aop:advisor advice-ref="switchInteceptor" pointcut-ref="switch-service-pointcut"/>
    </aop:config>
    
    <bean id="wwitchControlHttpServer" class="org.autoswitch.SwitchControlHttpServer" init-method="init"></bean>
    
    <bean id="testService" class="org.autoswitch.test.TestServiceImpl" />
    
    <bean id="testController" class="org.autoswitch.test.TestController" />

     例如下面的service,上面注释分别是在应用启动后手工屏蔽该服务调用,以后每次调用直接用参数的jsonResult反序列后返回, classmethod是具体到某个方法名称,status为open关闭该服务,close表示重新打开服务,jsonResult是mock返回结果的json串, 如果是基本类型,则必须用ret作为key,其他list,bean之类的就直接用json串,type表示如果list有泛型的话则是返回的类完整类型;

     

    public class TestServiceImpl implements TestService{
    //http://localhost:8080/control/a.htm?classmethod=org.autoswitch.test.TestServiceImpl.hello&status=open&jsonResult=1
    public void hello(){
        System.out.println("hello");
    }
    
    //http://localhost:8080/control/a.htm?classmethod=org.autoswitch.test.TestServiceImpl.sayHello&status=open&jsonResult={ret:%22goodbuy%22}
    public String sayHello(){
        return "sayHello";
    }
    //http://localhost:8080/control/a.htm?classmethod=org.autoswitch.test.TestServiceImpl.getNames&status=open&jsonResult=[{"catList":[],"id":1,"name":"aaa"},{"catList":[],"id":1,"name":"aaa"},{"catList":[],"id":1,"name":"aaa"}]&type=org.autoswitch.test.TestBean
    public List<TestBean> getNames(){
        return null;
    }
    
    // http://localhost:8080/control/a.htm?classmethod=org.autoswitch.test.TestServiceImpl.getBeans&status=open&jsonResult={"catList":["123","456","789"],"id":1,"name":"aaa"} public TestBean getBeans(){ return null; }}

    3调用示例代码

    public class MainTest {
    
      public static void main(String[] args) {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:spring-bean.xml");
            TestService testControl = (TestService) context.getBean("testService");
            try{
                testControl.hello();
                System.out.println(testControl.sayHello());
                List<TestBean> list = testControl.getNames();
                for(TestBean bean: list){
                    System.out.println(bean.getId() + bean.getName() + bean.getCatList());
                }
                TestBean bean = testControl.getBeans();
                System.out.println(bean.getId() + bean.getName() + bean.getCatList());
            }catch(Exception e){}
    
    
            for(int i = 0; i < 10; i++){
                try{
    //              testControl.hello();
                    System.out.println(testControl.sayHello());
    //              List<TestBean> list = testControl.getNames();
    //              for(TestBean bean: list){
    //                  System.out.println(bean.getId() + bean.getName() + bean.getCatList());
    //              }
    //              TestBean bean = testControl.getBeans();
    //              System.out.println(bean.getId() + bean.getName() + bean.getCatList());
                }catch(Exception e){
                    e.printStackTrace();
                }   
            }
    
        }
    }

     4.输出

    Listening on port 8080
    hello
    sayHello
    Incoming connection from /127.0.0.1
    New connection thread
    goodbuy
    goodbuy
    Incoming connection from /127.0.0.1
    New connection thread
    sayHello
    sayHello
    sayHello
    sayHello
    sayHello
    sayHello
    sayHello
    sayHello

     这里只是提供一种示例,如果要在生产环境中使用,则需要对并发控制,返回结果的序列化,方法名称一致参数不一致等各种情况进行控制, 同时还需要对权限,后台管理系统等可以做优化。

    展开全文
  • replugin java8降级java7踩坑

    千次阅读 2018-10-29 20:51:47
    replugin java8降级java7踩坑replugin 框架不支持java8编译所以必须降到java7 replugin 框架不支持java8编译所以必须降到java7 compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 ...

    replugin 框架不支持java8编译所以必须降到java7

    compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
    }

    如果依赖项目或者aar有使用java8编译,那么在编译的时候就会提示

    Invoke-customs are only supported starting with Android O (–min-api 26)
    Message{kind=ERROR, text=Invoke-customs are only supported starting with Android O (–min-api 26), sources=[Unknown source file], tool name=Optional.of(D8)}

    AGPBI: {“kind”:“error”,“text”:“Invoke-customs are only supported starting with Android O (–min-api 26)”,“sources”:[{}],“tool”:“D8”}

    Caused by: com.android.builder.dexing.DexArchiveBuilderException: Error while dexing.
    The dependency contains Java 8 bytecode. Please enable desugaring by adding the following to build.gradle
    android {
    compileOptions {
    sourceCompatibility 1.8
    targetCompatibility 1.8
    }
    }

    解决方案就是把每一个依赖module或者aar使用 java7编译,在build中配置

    compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
    }

    留档

    展开全文
  • java并发和高并发之服务降级与熔断

    千次阅读 2020-03-11 22:17:21
    一、服务降级指的是,通过页面、服务等有策略地进行服务降级,尽可能正确地响应大部分用户的请求。通俗来说,就是如果无法 处理该问题时,给一个默认结果。 1、常见的降级方案: 1)自动降级: 》超时:主要为...

    服务降级和服务熔断都是从应用层面,或者说服务层面,

    一、服务降级指的是,通过页面、服务等有策略地进行服务降级,尽可能正确地响应大部分用户的请求。通俗来说,就是如果无法

    处理该问题时,给一个默认结果。

    1、常见的降级方案:

      1)自动降级:

            》超时:主要为配置好超时时间和超时重试次数,同时通过异步的方式探测回旋情况

            》失败次数:常用于一些不稳定的api ,容易出现故障,达到一定次数时,设置自动降级,也通过异步的方式探测回旋情况

            》故障:比如远程访问网络故障,dns故障,还有远程服务挂掉,缓存故障等出现时,自动降级。

            》限流:和通常所说的限流是一致的。如抢购等,通过限制访问数量,采取无货回复、排队等待、错误回复等方式处理。

      2)人工降级:

             秒杀、 双十一大促等,手动设置可访问的数量

    二、服务熔断,是指软件系统因为某些原因发生错误,为了减少对其他服务的影响,对该服务进行熔断处理。常见于某时刻负载

    过大,也常被称为过载保护。

    三、服务降级和服务熔断,

    有些共性:

       1、目的:都是为了尽可能返回给用户正确的相应。

       2、最终表现:尽可能让用户感觉体验良好,而非系统卡顿,无响应,

      3、粒度:常用于应用层面,或者说服务层面,极少也存在于数据库层面,

      4、自治:熔断,是完全服务自治,而服务降级可以人工干预,但完全靠人工干预是不现实的。

     有些区别:

      1、触发的原因:熔断是因为服务自身内部出现故障或者过载,而服务降级,则来源于外界因素。

     2、管理目标层次不同:熔断是从整个系统框架层面考虑,比如每个微服务都需要。而服务降级是出现在业务层面,有些可能不

    需要;

    3、实现方式不同。

    四、服务降级要考虑的因素:

          服务是否为核心服务?

          服务是否支持降级,降级策略是什么?

          业务放通场景、策略。

    五、典型解决方案:

     Hystrix  类,

      

     

     

     

    展开全文
  • 5月TIOBE编程榜,Java、PHP降级,C#再度上升!.pdf
  • java熔断、降级、hystrix监控

    千次阅读 2018-07-13 10:27:11
    java -jar standalone -hystrix -dashboard - {VERSION} -all . jar 5.访问 默认端口为7979 访问接口查看监控指标 1.通过stream查看指标 http://127.0.0.1:8180/hystrix.stream 上面看到的...

    一、hystrix

    https://blog.csdn.net/zjcsuct/article/details/78198632

    二、实现方式

    1.通过注解实现

    2.AOP实现

    3.继承方式实现

    三、hystrix监控

    1.单机监控

    修改项目配置

    1、pom.xml
     <dependency>
        <groupId>com.netflix.hystrix</groupId>
         <artifactId>hystrix-core</artifactId>
         <version>1.4.10</version>
     </dependency> 
     <dependency>
         <groupId>com.netflix.hystrix</groupId>
          <artifactId>hystrix-metrics-event-stream</artifactId>
         <version>1.4.10</version>
    </dependency>

    说明:
    hystrix-core:hystrix核心接口包
    hystrix-metrics-event-stream:只要客户端连接还连着,hystrix-metrics-event-stream就会不断的向客户端以text/event-stream的形式推送计数结果(metrics)

    2.在web.xml添加如下配置
    <servlet>
            <display-name>HystrixMetricsStreamServlet</display-name>
            <servlet-name>HystrixMetricsStreamServlet</servlet-name>
            <servlet-class>com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>HystrixMetricsStreamServlet</servlet-name>
            <url-pattern>/hystrix.stream</url-pattern>
        </servlet-mapping>

    下载hysttrix-dashboard

    方式一:下载源码包
    地址:https://github.com/kennedyoliveira/standalone-hystrix-dashboard

    git clone https://github.com/kennedyoliveira/standalone-hystrix-dashboard.git
    cd standalone-hystrix-dashboard

    方式二:直接下载打好的jar包
    因方式一下载后打包有莫名其妙的问题
    地址:https://bintray.com/kennedyoliveira/maven/standalone-hystrix-dashboard/1.5.6
    在页面最下面有个Downloads标签
    这里写图片描述
    下载 standalone-hystrix-dashboard-1.5.6-all.jar即可

    部署hystrix-dashboard

    1.如果用方式一的下载方式,需要编译进入目录编译

    ./gradlew runDashboard

    2.如果用方式一的下载方式在C:\xxx\xxx\standalone-hystrix-dashboard-1.5.6\standalone-hystrix-dashboard-1.5.6\build\libs目录下找到打好的jar包
    3.将方式一下载打好的jar包或方式二下载的jar包上传到服务器
    4.使用如下命令启动

    java -jar standalone-hystrix-dashboard-{VERSION}-all.jar

    5.访问
    默认端口为7979

    访问接口查看监控指标

    1.通过stream查看指标
    http://127.0.0.1:8180/hystrix.stream
    这里写图片描述
    上面看到的数据不直观,我们通过standalone-hystrix-dashboard提供的界面看下
    这里写图片描述
    填写项目地址http://127.0.0.1:8180/hystrix.stream
    点击:AddStream
    点击:monitor stream
    这里写图片描述

    监控界面参数说明
    这里写图片描述

    2.集群监控

    再生产环境下,一般都是部署的集群,但是按照上面单机监控的思路去解决的话,很多指标都是针对单台机器的,其实更多情况下我们不关注但台机器指标,而是看hystrx相关指标是否正常,所以需要一个聚合各机器指标的地方,这个项目就是turbine。集群hystrix指标监控的实现思路是
    hysttrix-dashboard—–>turbine-web(集合监控数据)——->hystrix.stream

    下载turbine-web

    下载地址
    http://search.maven.org/remotecontent?filepath=com/netflix/turbine/turbine-web/1.0.0/turbine-web-1.0.0.war

    启动你要监控的项目集群

    将要监控的项目集群启动

    解压turbine-web

    下载下来的是一个war工程,可以直接修改后缀为.zip使用解压软件解压,将解压后的工程放到tomcat中的webapps目录下。

    配置聚合信息

    进入WEB-INF\classes目录,打开config.properties
    该文件中会配置:
    1. Turbine在监控哪些集群:turbine.aggregator.clusterConfig=cluster-1,cluster-2
    2. Turbine怎样获取到节点的监控信息(hystrix.stream):turbine.instanceUrlSuffix. = :/HystrixDemo/hystrix.stream
    3. 集群下有哪些节点:turbine.ConfigPropertyBasedDiscovery.cluster-1.instances=localhost:8080,localhost:8081
    上面这些都是最简单的配置方法 Turbine使用了Netflix的另一个开源项目Archaius(https://github.com/Netflix/archaius)来做配置文件的管理,其提供了非常强大的配置文件管理策略,有需要的同学可以深入研究(https://github.com/Netflix/Turbine/wiki/Configuration)。

    启动turbine

    集群监控方式

    这里写图片描述
    这样点击monitorStream就会展示cluster-1集群机器的汇总数据

    说明:注意turbine的配置

    展开全文
  • 解决办法就是在编译时,降级编译,使用1.7或之前的版本jdk进行编译。 这个时候可能代码会有一些不兼容,需要进行微调,根据ide给出的提示自己调整好. 我最后还是不行,在pom.xml里面添加 <plugin> <...
  • 什么是服务降级

    千次阅读 2018-11-29 14:30:59
    服务降级,就是对不怎么重要的服务进行低优先级的处理。说白了,就是尽可能的把系统资源让给优先级高的服务。资源有限,而请求是无限的。如果在并发高峰期,不做服务降级处理,一方面肯定会影响整体服务的性能,严重...
  • 主要介绍了Java RPC框架熔断降级机制原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 分布式服务Dubbo:服务降级

    千次阅读 2017-12-29 11:17:29
    何为服务降级?为什么使用服务降级服务降级就是当服务响应超时或连接请求超时,不用继续等下去,而采用降级措施,意思就是返回一个planB,返回一个我们自己定义好的提示。 而之为什么要使用服务降级,这时防止...
  • Mac下如何降级Java、卸载Java

    千次阅读 2019-11-26 10:03:25
    前言 安装一些组件或插件时,有时...查看组件或插件对应的Java版本会发现,可能只支持 Java 8,但本地安装的Java版本不一定能对应。 查看Java版本: #查看版本 java -version #查看安装位置 /usr/libexec/java_home...
  • java 多线程 锁降级

    千次阅读 2018-04-19 21:44:22
    降级指的是写锁降级为读锁。如果当前线程拥有写锁,然后将其释放,最后再获取读锁,这种并不能称之为锁降级,锁降级指的是把持住(当前拥有的)写锁,再获取到读锁,随后释放(先前有用的)写锁的过程。下面给出一个锁...
  • 服务降级 fallback 概念:服务器繁忙,请稍后重试,不让客户端等待并立即返回一个友好的提示。fallback 出现服务降级的情况: 程序运行异常 超时 服务熔断触发服务降级 线程池/信号量打满也会导致服务降级 服务...
  • 7、何时进行服务熔断、服务降级服务限流?

    万次阅读 多人点赞 2018-03-31 14:17:43
    伴随着微服务架构被宣传得如火如荼,一些概念也被推到了...服务熔断 在介绍熔断机制之前,我们需要了解微服务的雪崩效应。在微服务架构中,微服务是完成一个单一的业务功能,这样做的好处是可以做到解耦,每个微服...
  • java 降级锁的理解

    千次阅读 2019-03-26 13:57:24
    读写锁是什么我就不多说了,下面说什么是锁降级降级: 锁降级指的是写锁降级成为读锁。如果当前线程拥有写锁,然后将其释放,最后再获取读锁,这种分段完成的过程不能称之为锁降级。锁降级是指把持住(当前...
  • SDS(​​服务降级系统) 1.背景 移动互联网时代的来临,给业务增长插上翅膀的同时,也给服务端应用带来了巨大的挑战,大流量,高并发和海量数据似乎成为了服务端应用的标配。 为了对端上请求进行统一处理,鉴权和...
  • 服务降级服务熔断的区别: 1、服务降级:当服务调用出现响应时间过长或者运行出差或者宕机,就会调用服务降级方法快速响应。 2、服务熔断,只有在一定时间内服务调用失败(报错、超时、宕机)达到一定次数,才会...
  • 谈一谈服务降级

    千次阅读 2018-07-08 21:46:12
    在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。之前已经有一些文章介绍过缓存和限流了。...其实降级最关键的还是根据实际支持情况进行降级处理,不同的情况适用不同的降级方法。降级的...
  • 高并发之——服务降级与熔断

    千次阅读 2019-10-27 20:56:24
    由于爆炸性的流量冲击,对一些服务进行有策略的放弃,以此缓解系统压力,保证目前主要业务的正常运行。它主要是针对非正常情况下的应急服务措施:当此时一些业务服务无法执行时,给出一个统一的返回结果。 降级服务...
  • Java 读写锁 之 锁降级

    千次阅读 2019-06-18 19:47:03
    举一个场景:数据不常变化,多个线程可以对数据进行并发的处理,如果当前线程感知数据变化,则进行数据处理操作,而其他线程则会被阻塞,直至当前线程完成数据的准备操作,这时候就需要使用锁降级。 具体代码,...
  • Hystrix关于服务降级

    千次阅读 2018-08-04 16:43:11
    fallback是Hystrix命令执行失败时的后备方法,用来实现服务降级处理。 二 HystrixCommand的服务降级示例 package com.didispace.web; import static org.junit.Assert.*; import java.util.concurrent....
  • 既然大家看到了这篇博客,也应该都大概了解了读写锁的一些概念,咱们直接上主题,读写锁中为什么要用锁降级; 先引用书上的一段话说说锁降级的概念:         锁降级指的是写锁降级成为读锁。如果当前线程...
  • SpringCloud之服务降级

    千次阅读 2018-08-05 17:49:07
    服务降级处理是在客户端实现完成的,与服务端没有关系。 1、接口DeptClientService: /** * * @Description: 修改microservicecloud-api工程,根据已经有的DeptClientService接口 新建 一个实现了Fallback...
  • 服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。 服务降级方式: 服务接口拒绝服务:无用户特定信息,页面能访问,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,463
精华内容 23,385
关键字:

java如何进行服务降级

java 订阅