Dubbo泛化引用

泛化调用,无需业务接口类进行远程调用,用于测试平台,开放网关桥接等(可用于生产环境)

 

说明泛化引用主要是针对服务消费者,服务提供方正常暴露服务即可,无须做任何修改。

用途:泛接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Map表示,通常用于框架集成,比如:实现一个通用的服务测试框架,可通过GenericService调用所有服务实现。

 

好处:无须将model和api暴露出去,服务消费方只需要知道调用的接口名称、方法名、参数、参数类型等等就可以实现远程调用。

 

简单Demo

 

(1)API(在泛化引用的情况下,不暴露给消费者):

 

public interface IMenusService {
	public String test(String id);
}

 

 

 

(2)服务提供者(接口实现):

 

public class IndexMenusServiceImpl implements IMenusService {
	@Override
	public String test(String id) {
		return id + "测试";
	}
}

 

 

 

 (3)在服务消费方配置:

 

<!--   generic="true" 声明为泛化引用-->

 

<dubbo:reference  id="genericService" interface="com.sic777.modules.menus.service.IMenusService"   generic="true" />

 

 

 

(4)调用(基于SpringMvc):

基本类型以及Date,List,Map等不需要转换,直接调用:

 

@Controller
@RequestMapping("generic")
public class GenericAction {
	@Resource
	private GenericService genericService;
	
	@ResponseBody
	@RequestMapping("getGeneric")
	public String Generic(){
// 基本类型以及Date,List,Map等不需要转换,直接调用
Object result = genericService.$invoke("test", new String[] { "java.lang.String" }, new Object[] { "2" });// 如果返回POJO将自动转成Map 
return result.toString();
	}
}

 

如果是POJO参数

 

// 用Map表示POJO参数,如果返回值为POJO也将自动转成Map 
Map<String, Object> menus = new HashMap<String, Object>();
menus.put("menuSeq", "222");
menus.put("menuName", "远程测试");
// 如果返回POJO将自动转成Map 
Object result = genericService.$invoke("getMenusModel", new String[] { "com.sic777.modules.menus.model.Menus" }, new Object[] { menus });

 

 

这样就能够在客户端没有API接口及模型类元的情况下远程调用服务。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值