ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Dubbo常用功能08--本地存根

2021-11-04 13:33:56  阅读:167  来源: 互联网

标签:Dubbo name SiteService -- 存根 timeout import public 服务端


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、接口层新增一个stub类:

这里用到了代理模式。

这个类必须和SiteService接口放在同一个包下(约定)。

 1 package com.yas.api;
 2 
 3 public class SiteServiceStub implements SiteService {
 4     private SiteService siteService;
 5 
 6     public SiteServiceStub(SiteService siteService){
 7         this.siteService = siteService;
 8     }
 9 
10     @Override
11     public String getName(String name) {
12         try{
13             return this.siteService.getName(name);
14         }catch (Exception e){
15             return "stub:"+name;
16         }
17     }
18 }

 

4、消费方代码:

package com.yas.serviceconsumer.controller;

import com.yas.api.SiteService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TimeoutController {
    //客户端未设置timeout,服务端也未设置timeout,则默认为1000毫秒超时
    //客户端未设置timeout,服务端设置了timeout,则客户端以服务端设置为准
    //如果客户端timeout的时间到了,服务端还没有返回数据,则抛出异常
    //如果客户端timeout到之前,已经从服务端获取了响应,则正常执行


    @Reference(version = "timeout",timeout = 2000,stub = "true")
    SiteService siteService;

    @RequestMapping("/timeout")
    public String getName(@RequestParam("name") String name){
        return siteService.getName(name);
    }
}

 

5、测试:

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

结果如下:stub:zhangsan

 

标签:Dubbo,name,SiteService,--,存根,timeout,import,public,服务端
来源: https://www.cnblogs.com/asenyang/p/15507746.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有