zoukankan      html  css  js  c++  java
  • Dubbo常用功能07服务降级

    服务消费者通过Mock指定服务超时后的策略:

    1、配置文件:

    server:
      port: 8001
    dubbo:
      application:
        name: site-service-boot-provider
      registry:
        address: zookeeper://ubu:2181
      scan:
        base-packages: com.yas.serviceprovider
      #指定某一种协议
      protocol:
        name: dubbo
        port: 20882

    2、提供方代码:

     1 package com.yas.serviceprovider.timeout;
     2 
     3 import com.yas.api.SiteService;
     4 import org.apache.dubbo.config.annotation.Service;
     5 //1.如果服务端设置了timeout,而客户端没有设置,表示客户端采用服务端一样的timeout
     6 //2.如果服务端的实际执行时间比设置的timeout要长,那么会打印超时日志,但服务会正常执行
     7 @Service(version = "timeout",timeout = 4000)
     8 public class TimeoutSiteServiceImpl implements SiteService {
     9     @Override
    10     public String getName(String name) {
    11         try {
    12             Thread.sleep(5000);
    13         } catch (InterruptedException e) {
    14             e.printStackTrace();
    15         }
    16         return "timeout:"+name;
    17     }
    18 }

    3、消费方代码:

     1 package com.yas.serviceconsumer.controller;
     2 
     3 import com.yas.api.SiteService;
     4 import org.apache.dubbo.config.annotation.Reference;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 import org.springframework.web.bind.annotation.RequestParam;
     7 import org.springframework.web.bind.annotation.RestController;
     8 
     9 @RestController
    10 public class TimeoutController {
    11     //客户端未设置timeout,服务端也未设置timeout,则默认为1000毫秒超时
    12     //客户端未设置timeout,服务端设置了timeout,则客户端以服务端设置为准
    13     //如果客户端timeout的时间到了,服务端还没有返回数据,则抛出异常
    14     //如果客户端timeout到之前,已经从服务端获取了响应,则正常执行
    15 
    16 
    17     //force策略:表示消费方不进行RPC请求,直接返回
    18     //@Reference(version = "timeout",timeout = 2000,mock="force:return timeout")
    19 
    20     //fail策略:表示消费方发送RPC请求失败(超时)后,不抛出异常,而是返回指定值。
    21     @Reference(version = "timeout",timeout = 2000,mock="fail:return timeout")
    22     SiteService siteService;
    23 
    24     @RequestMapping("/timeout")
    25     public String getName(@RequestParam("name") String name){
    26         return siteService.getName(name);
    27     }
    28 }

    4、测试:

    使用postman请求地址:http://localhost:8000/timeout?name=zhangsan

    经过大约5秒时间之后,正常获得响应:

     消费方没有报异常。

    如果将消费方代码修改为:

    @Reference(version = "timeout",timeout = 2000,mock="force:return timeout")

    则postman会直接获得消费方的返回数据(rpc调用没有发起)。

  • 相关阅读:
    MyEclipse安装教程以及配置server和运行起来
    倒计时代码-附效果图
    图片循环滚动代码-附效果图
    一个手机页面的导航代码,附效果图
    html电子书翻页效果代码,附效果演示
    唯美雪景雪花飘落代码,附效果演示
    非常漂亮的纯css3实现多彩侧边导航(非常流畅),附效果演示
    页面加密代码,附效果演示
    前端开发每天必学之HTML入门介绍
    仿网易官网顶部展出的大幅广告代码,附效果演示
  • 原文地址:https://www.cnblogs.com/asenyang/p/15507605.html
Copyright © 2011-2022 走看看