国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:

這篇具有很好參考價值的文章主要介紹了Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Ribon的服務降級操作

雪崩效應:

Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:

?如果短信服務炸了后面的所有服務就會起連鎖反應造成全部服務掛掉這就是雪崩效應,那么其實短信服務又不是我們主要業(yè)務,這個時候我們可以采用服務降級,服務降級就是暫時的把短信服務停掉能用就返回不能用就返回個錯誤,但是它也不會影響到我們的主業(yè)務,這樣就會保障我們主要服務的正常運行

總結下其實就是對于我們的非主線業(yè)務我們一般會才去服務降級的方式保證我們的主要業(yè)務正常的運行

服務降級或者是容錯我們才使用springcloud提供的Hystrix(豪豬)進行操作:

Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:

首先我們在member項目上進行測試

輸入測試地址:http://localhost:8088/test?bid=1,返回的信息如下圖所示

Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:

?返回的controller使我們的Ribbon對RestTemplate做的集群請求,如下所示:

Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:

?我們把book的服務停掉來看下結果:

Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:

我們發(fā)現我們的book服務訪問不到了,但是這樣是不成的我們來給用戶看,其實是因為book的模塊因為壓力太大我手動的給停掉了(后續(xù)會使用熔斷器進行操作)

所以下面我們使用Hyxtrix進行操作,首先我們先導入Hyxtrix的依賴,在member的pom.xml文件中

<!--Hyxtrix的依賴-->
<dependency>
????<groupId>org.springframework.cloud</groupId>
????<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

然后在Member項目啟動類添加一個注解:

package com.laosan.member;
@SpringBootApplication
@EnableFeignClients ????//開啟feign客戶端
@EnableCircuitBreaker ??//開啟斷路器
public class MemberApplication {
???public static void main(String[] args) {
??????SpringApplication.run(MemberApplication.class, args);
???}
????/**
?????* 注入一個RestTemplate
?????* @return
?????*/
???@Bean
????@LoadBalanced ??//對RestTemplate對象進行負載均衡操作
???public RestTemplate ?getRestTemplate() {
????????RestTemplate restTemplate = new RestTemplate();
????????return restTemplate;
????}
}

回到我們Controller中要對test這個方法寫一個服務降級的方法

Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:

具體的解決如下所示:

/**
?* 遠程調用我們需要的book服務里面對應的操作
?* @param bid
?* @return
?*/
@GetMapping("/test")
@ResponseBody
@HystrixCommand(fallbackMethod = "fallbback") ??//服務降級對應的方法
public String test(Long bid) {
????String json = restTemplate.getForObject("http://book/info?bid="+bid, String.class);
????return json;
}

/**
?* 服務降級
?* 該方法的名字隨便起
?* 但是該服務降級的方法要求返回值和參數與目標方法保持一致
?* 最后還要在目標方法上添加一個注解
?* @param bid
?* @return
?*/
private String fallbback(Long bid) {
????return "當前服系統(tǒng)正忙,請稍后再試。。。";
}

然后我們通過瀏覽器進行測試

Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:

返回我們對服務降級所要的結果

但是我們還是有個問題,就是Controller中有多個方法需要服務降級,那么我們就要為每一個方法寫一個對應的降級方法,這個時候我們就需要寫一個通用的全局的服務降級方法

首先我們要在該Controller中添加一個注解

@Controller
@CrossOrigin ???//跨域問題的解決
@DefaultProperties(defaultFallback = "defaultFallBack")
public class MemberController {
????@Autowired
????private MemberService memberServic

定義一個服務降級的方法

/**
?* 全局的默認的服務降級方法,不需要參數,且返回String或者任何可以被Json序列化的對象
?* @return
?*/
private String defaultFallBack() {
?????return "【默認服務降級】當前服系統(tǒng)正忙,請稍后再試。。。";
}

對應的服務降級的方法上面的注解也需要改變下,如下所示:

/**
?* 遠程調用我們需要的book服務里面對應的操作
?* @param bid
?* @return
?*/
@GetMapping("/test")
@ResponseBody
//@HystrixCommand(fallbackMethod = "fallbback") ??//服務降級對應的方法
@HystrixCommand ????//找的是上面定義的默認的服務降級的方法
public String test(Long bid) {

}

但是現在還有個問題就是超時的問題,如果請求超出了時間Hystrix也會對我們進行服務的降級,測試如下所示,我們把我們的book服務啟動,并在book的Controller的info方法中設置一個時間:

@GetMapping("/info")
@ResponseBody
public Map<String, Object> info(Long bid){
????//測試服務降級我們在這里添加了一個2秒的等待時間
????try {
????????Thread.sleep(2000L);
????} catch (InterruptedException e) {
????????e.printStackTrace();
????}
????Map<String, Object> map = new HashMap<String, Object>();
????try {
????????Book book = bookService.getInfo(bid);
????????map.put("code", "0");
????????map.put("message", "success");
????????map.put("data", book);
????} catch (Exception e) {
????????e.printStackTrace();
????????map.put("code", e.getClass().getSimpleName());
????????map.put("message", e.getMessage());
????}
????return map;
}

啟動book服務

我們通過瀏覽器來查看會不會對我們進行一個服務降級的操作呢,在瀏覽器進行測試,如下所示:

Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:

?我們發(fā)現也發(fā)生了服務降級

Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:

這樣的話是不太好的我們需要對服務降級的時間進行設置,因為他的默認服務降級的時間是1秒,多于1秒立刻服務降級

具體操作如下所示:

我們要在member項目中創(chuàng)建一個配置文件application.yml文件進行配置:


#設置服務降級的最大降級時間
hystrix:
??command:
????default:
??????execution:
????????isolation:
??????????thread:
????????????timeoutInMilliseconds: 3000

最后在瀏覽器進行測試

Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:

Spring Cloud 容錯機試 Hystrix 服務降級 Feign

我們回到book項目進行操作:

首先我們打開bootstrap.yml進行操作:

spring:
??application:
????name: book ??#這里的名字必須要和Eureka中的服務名稱,和配置中心的名字保持一致
??#開啟配置中心
??cloud:
????config:
??????discovery:
????????enabled: true
????????service-id: config ??#這里的名字要和我Eureka服務中的配置中心名稱的服務保持一致
??????profile: dev
#注冊進服務
eureka:
??client:
????service-url:
??????defaultZone: http://localhost:8761/eureka/
#在feign中開啟hystrix
feign:
??hystrix:
????enabled: true

然后我們打開book項目client包下feign的客戶端進行操作:

具體的想法是雖然你的服務掛掉的但是通過hystriy返回一個類似的真實數據

我們發(fā)現因為我們feign是個接口沒辦法進行操作,那么我們可以在接口中寫一個靜態(tài)內部類進行實現就好,具體的如下所示:boot服務中

package com.pb.client;

import com.pb.dto.MemberDTO;
import com.pb.vo.ResultVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Map;

@FeignClient(name="member",fallback = MemberClient.MemberClientFallBack.class)
public interface MemberClient {
        //調用member的服務請求為selectMemberByMobile的
        @RequestMapping("/selectMemberByMobile")
        ResultVo<MemberDTO> selectMemberByMobile(@RequestParam("mobile") String mobile);


        @Component
        //通過靜態(tài)內部類來實現自己進行完成操作
        static  class MemberClientFallBack implements MemberClient{

                @Override
                public ResultVo<MemberDTO> selectMemberByMobile(String mobile) {
                        //啟動服務降級并給一個假的數據返回個調用方
                        ResultVo<MemberDTO> resultVO = new ResultVo<>();
                        resultVO.setCode(200);
                        resultVO.setMessage("success");
                        MemberDTO memberDTO = new MemberDTO();
                        memberDTO.setMid(0L);
                        resultVO.setData(memberDTO);
                        return resultVO;
                }
        }

}
@Transactional
@Override
public void takeBookBookrow(String mobile,Long bid,  Date takedate, Date returndate) {
    Book book=null;
    Optional<Book> option = bookRespository.findById(bid);
    if (option.isPresent()){
        book=option.get();
    }else {
        throw  new BookNotFoundException("圖書未找到");
    }

    //庫存是否為0
    if (book.getStock()<=0){
        throw  new BookLessException("庫存不足");
    }

    //開始插入借書的記錄 ,有個數據要先處理一下  mid
    MemberDTO memberDTO=null;

    ResultVo<MemberDTO> result = memberClient.selectMemberByMobile(mobile);
    if (result.getCode() == 200){
        memberDTO=result.getData();
        if (memberDTO.getMid()==0){
            throw  new RuntimeException("輸入錯誤");
        }
    }

    //借書記錄插入
    Borrow borrow=new Borrow();
    borrow.setBid(bid);
    borrow.setMid(memberDTO.getMid());  //*
    borrow.setCreatetime(new Date());
    borrow.setTakedate(takedate);
    borrow.setReturndate(returndate);

    //插入下
    borrowRepository.save(borrow);

    //修改庫存
    book.setStock(book.getStock()-1);
    bookRespository.saveAndFlush(book);
}

好我們先把book的服務停掉,然后啟動我們的前臺頁面index.html

Hystrix斷路器:(必須和服務降級聯合使用)

Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:

改造member項目的Controller里面的內容:

/**
?* 遠程調用我們需要的book服務里面對應的操作

*/
@GetMapping("/test")
@ResponseBody
//@HystrixCommand(fallbackMethod = "fallbback") ??//服務降級對應的方法
@HystrixCommand
public String test(Long bid) {
????????String json = null;
????if(bid % 2 == 0) {
???????json = restTemplate.getForObject("http://book/info?bid=" + bid, String.class);
????}
????else {
????????json = "success";
????}
????return json;
}

進行對斷路器時間的設置:

hystrix:

??command:

????default:

??????execution:

????????isolation:

??????????thread:

????????????timeoutInMilliseconds: 3000

??????circuitBreaker:

????????requestVolumeThreshold : 10???#10個請求

????????sleepWindowInMilliseconds: 10000???#休息10秒 中

????????errorThresholdPercentage: 60????#錯誤的請求達到60%文章來源地址http://www.zghlxwxcb.cn/news/detail-465382.html

到了這里,關于Spring Cloud 容錯機試 Hystrix 服務降級 RestTemplate:的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 微服務 – Spring Cloud – Hystrix

    hystrix是Netlifx開源的一款容錯框架,防雪崩利器,具備服務降級,服務熔斷,依賴隔離,監(jiān)控(Hystrix Dashboard)等功能。 Hystrix is no longer in active development, and is currently in maintenance mode. Hystrix 已經停更 服務降級 服務熔斷 服務限流 服務超時 服務宕機(服務崩掉、機房斷電、服務故

    2024年02月11日
    瀏覽(26)
  • 【Spring Cloud】服務容錯中間件Sentinel入門

    【Spring Cloud】服務容錯中間件Sentinel入門

    歡迎來到阿Q社區(qū) https://bbs.csdn.net/topics/617897123 Sentinel(分布式系統(tǒng)的流量防衛(wèi)兵)是阿里開源的一套用于 服務容錯 的綜合性解決方案。它以流量為切入點,從 流量控制、熔斷降級、系統(tǒng)負載保護 等多個維度來保護服務的穩(wěn)定性。 Sentinel 具有以下特征: 豐富的應用場景 :

    2024年04月15日
    瀏覽(32)
  • 【Spring Cloud】服務容錯中間件Sentinel進階——五大規(guī)則

    【Spring Cloud】服務容錯中間件Sentinel進階——五大規(guī)則

    我們在上一篇文章中對 Sentinel 已經有了基本的了解,接下來,我們一起對它的進階進行學習吧! 資源 所謂資源就是 Sentinel 要保護的東西,資源是 Sentinel 的關鍵概念。它可以是Java應用程序中的任何內容,可以是一個服務,也可以是一個方法,甚至可以是一段代碼。 我們入門

    2024年04月26日
    瀏覽(23)
  • Spring Cloud OpenFeign:基于Ribbon和Hystrix的聲明式服務調用

    Spring Cloud OpenFeign:基于Ribbon和Hystrix的聲明式服務調用

    ??wei_shuo的個人主頁 ??wei_shuo的學習社區(qū) ??Hello World ! Spring Cloud OpenFeign是一個聲明式的服務調用框架,基于Feign并整合了Ribbon和Hystrix;目標是簡化分布式系統(tǒng)中編寫服務間調用的代碼,并提供一種更加優(yōu)雅和便捷的方式來進行服務之間的通信 依賴導入 application.yml配置 啟

    2024年02月05日
    瀏覽(35)
  • Hystrix入門使用 服務熔斷 服務降級 服務雪崩

    Hystrix入門使用 服務熔斷 服務降級 服務雪崩

    hystrix停止更新,理念優(yōu)秀。 分布式系統(tǒng)面臨的問題: 對于復雜的分布式體系,有數十個依賴,依賴不可避免的錯誤。 服務會出現雪崩, 高可用受到破壞 。 Hystrix就是用于解決分布式系統(tǒng)延遲和容錯的開源庫。 保證在一個依賴出現問題,不會導致整體的服務失敗,避免級聯故

    2024年02月07日
    瀏覽(31)
  • 【spring Cloud】微服務通信的三種方式RestTemplate、Feign遠程調用與Dubbo的使用

    目錄 一、通過RestTemplate調用微服務 二、通過Feign遠程調用 三、Dubbo? 分布式中的遠程調用大概分為兩種 RESTful接口? REST,即Representational State Transfer的縮寫,如果一個架構符合REST原則,就稱它為RESTful架構。 每一個URI代表一種資源; 客戶端和服務器之間,傳遞這種資源的某種

    2024年04月11日
    瀏覽(18)
  • SpringCloud(四)Hystrix服務降級、熔斷、監(jiān)控頁面

    SpringCloud(四)Hystrix服務降級、熔斷、監(jiān)控頁面

    官方文檔:https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/1.3.5.RELEASE/single/spring-cloud-netflix.html#_circuit_breaker_hystrix_clients 我們知道,微服務之間是可以進行相互調用的,那么如果出現了下面的情況會導致什么問題? 由于位于最底端的服務提供者E發(fā)生故障,那么此時會直接導

    2024年02月17日
    瀏覽(26)
  • Spring Cloud Alibaba【OpenFeign實現服務降級、Dubbo實現服務生產者、 Dubbo消費者調用接口 】(三)

    Spring Cloud Alibaba【OpenFeign實現服務降級、Dubbo實現服務生產者、 Dubbo消費者調用接口 】(三)

    目錄 服務調用_OpenFeign實現服務降級 服務調用_Dubbo實現服務生產者?

    2024年02月17日
    瀏覽(31)
  • 微服務:Springboot集成Hystrix實現熔斷、降級、隔離

    微服務:Springboot集成Hystrix實現熔斷、降級、隔離

    在分布式微服務的項目中,常常會有多個服務復用,產生多個服務調用的情況。比如A服務調用B服務,B服務調用C服務。服務調用鏈路長了必然會增加服務超時的概率,服務的超時阻塞會一直占用線程資源,大量的阻塞會直接消耗完服務線程,嚴重情況下會導致服務直接宕機從

    2024年02月12日
    瀏覽(19)
  • 【微服務筆記10】微服務組件之Hystrix實現服務降級和服務熔斷

    【微服務筆記10】微服務組件之Hystrix實現服務降級和服務熔斷

    這篇文章,主要介紹微服務組件之Hystrix實現服務降級和服務熔斷。 目錄 一、服務降級 1.1、什么是服務降級 1.2、實現服務降級 (1)引入依賴 (2)編寫Service層代碼 (3)編寫Controller層代碼 (4)運行測試 (5)fallbackMethod屬性 二、服務熔斷 2.1、什么是服務熔斷 2.2、實現服務

    2023年04月11日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包