• Dubbo常用功能09参数回调


    参数回调方式与调用本地callback或listener相同,只要在Spring的配置文件中声明哪个参数是callback类型即可。

    Dubbo将基于长连接生成反向代理,这样就可以从提供方调用消费方的逻辑。

    简而言之,就是服务提供方调用服务消费方的逻辑。

    1、接口层修改:

    增加一个接口和一个类:

    1 package com.yas.api;
    2 
    3 public interface SiteServiceListener {
    4     void changed(String data);
    5 }
     1 package com.yas.api;
     2 
     3 import java.io.Serializable;
     4 
     5 public class SiteServiceListenerImpl implements SiteServiceListener, Serializable {
     6     @Override
     7     public void changed(String data) {
     8         System.out.println("changed:"+data);
     9     }
    10 }

    修改SiteService接口:

    package com.yas.api;
    
    public interface SiteService {
        String getName(String name);
    
        //回调方法
        default String getName(String name,String key,SiteServiceListener siteServiceListener){
            return null;
        }
    }

    2、提供方代码:

     1 package com.yas.serviceprovider.impl;
     2 
     3 import com.yas.api.SiteService;
     4 import com.yas.api.SiteServiceListener;
     5 import org.apache.dubbo.config.annotation.Argument;
     6 import org.apache.dubbo.config.annotation.Method;
     7 import org.apache.dubbo.config.annotation.Service;
     8 //参数method:用于标注被代理的方法的名称和用于回调的类型
     9 //参数callback:每个连接允许的回调实例数
    10 @Service(version = "callback",
    11         methods = {@Method(name="siteName",arguments = {@Argument(index=2,callback = true)})},
    12         callbacks = 3)
    13 public class CallbackSiteServiceImpl implements SiteService {
    14     @Override
    15     public String getName(String name) {
    16         return null;
    17     }
    18 
    19     @Override
    20     public String getName(String name, String key, SiteServiceListener siteServiceListener) {
    21 //        return SiteService.super.getName(name, key, siteServiceListener);
    22         siteServiceListener.changed("provider data");
    23         return "callback:key="+key+",name="+name;
    24     }
    25 }

    3、消费方代码:

     1 @RestController
     2 public class CallbackController {
     3 
     4     @Reference(version = "callback")
     5     SiteService siteService;
     6 
     7     @RequestMapping("/callback")
     8     public String getName(@RequestParam("name") String name){
     9         return siteService.getName(name,"key1",new SiteServiceListenerImpl());
    10     }

    4、测试:

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

    得到响应如下:

     同时在提供方的控制台可以看到如下信息:

     表明回调已经正常执行。

  • 相关阅读:
    手机app打开的web,在打开chrome浏览器
    linux环境下安装yaf
    redis在ubuntu下的安装
    验证一个值是否在多维数组中
    20个正则表达式
    nginx+memcached缓存图片
    cocos2dx加载骨骼动画,获取骨骼位置
    listview的pushBackDefaultItem中的item属性被修改问题
    lua保留n位小数方法
    cocos2dx中node的pause函数(lua)
  • 原文地址:https://www.cnblogs.com/asenyang/p/15507853.html
Copyright © 2020-2023  润新知