java impliments,dubbo使用GenericService泛化调用
我們項目中常見場景,java應用內部接口都是使用dubbo,某個非java應用需要調用我們的接口的時候,無法使用dubbo,這是我們需要給它提供其他形式的接口,如restful api等等,這時我們需要為這個接口開發而增加額外的工作量。這時候就可以使用dubbo提供的GenericService來調用dubbo接口了,而使用GenericService調用接口的好處是不需要依賴服務提供方給的interface,只需要知道接口的全類名,方法名,參數列表就能調用dubbo方法,拿到返回值,這種調用稱為泛化調用。
我們先看看GenericService里面的方法只有一個$invoke;
package com.alibaba.dubbo.rpc.service;
public abstract interface GenericService
{
public abstract Object $invoke(String paramString, String[] paramArrayOfString, Object[] paramArrayOfObject)
throws GenericException;
}
具體的使用方法如下:
我們先定義接口和實現:
public interface TestService{
public String test1(String arg);
}
public class TestServiceImpl impliments TestService{
public String test1(String arg){
return "TestService.test:" + arg;
}
}
泛化調用的使用GenericService方法如下:
ApplicationConfig application = new ApplicationConfig("test-generic-dubbo");//參數為dubbo消費方的名稱
ReferenceConfigreference = new ReferenceConfig();
application.setRegistry(dubboPropperties.getRegistry());//注冊中心的配置,這個我們可以在spring的bean中拿到dubboProperties,全類名為:io.dubbo.springboot.DubboProperties
reference.setApplication(application);
reference.setInterface(“com.xxx.TestService”);//dubbo接口的全類名
reference.setGroup("my-group");//dubbo的group
reference.setVersion("1.0.0");//dubbo的版本號
reference.setTimeout(3000);//dubbo調用的超時時間 單位:ms
reference.setGeneric(true);//是否支持泛化調用,我們這里肯定要設置為true
GenericService genericService = reference.get();//獲取genericService
Obect object = genericService.$invoke("test1",{"java.lang.String"},{"hello"});//調用泛化接口
System.out.println(object);//返回接口輸出為:TestService.test:hello
總結
以上是生活随笔為你收集整理的java impliments,dubbo使用GenericService泛化调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将php源码修改成存在注入的源码,天融信
- 下一篇: java 多表格处理工具,表单工具十一大