手動起動指定Duboインターフェース(三)----GenericService編

3137 ワード

方法を書いて、指定されたDuboインターフェース名、方法名、パラメータ値を方法に伝えて、メソッドは私達が指定したDuboインターフェースを呼び出して、結果を返します。
今回はDuboのGenericServiceを使います。
 
サンプルコード:
@Controller
@RequestMapping("/test")
public class TestController {

    /**
     * @param interfaceName Dubbo   
     * @param methodName       
     * @param parameter        
     * @return
     */
    @RequestMapping(value = "/test2", method = RequestMethod.POST)
    @ResponseBody
    public static Object test2(@RequestParam(value = "interfaceName") String interfaceName,
                            @RequestParam(value = "methodName") String methodName,
                            @RequestParam(value = "parameter") String parameter) {

        ApplicationConfig application = new ApplicationConfig("test-consumer"); //   dubbo      
        RegistryConfig registryConfig=new RegistryConfig();
        registryConfig.setAddress("zookeeper://127.0.0.1:2181");
        application.setRegistry(registryConfig);
        
        ReferenceConfig reference = new ReferenceConfig();
        reference.setApplication(application);
        reference.setInterface(interfaceName);
//            reference.setGroup("my-group");
//            reference.setVersion("1.0.0");
        reference.setTimeout(3000);
        reference.setGeneric(true);
        GenericService genericService = reference.get();
        Object object = genericService.$invoke(methodName, new String[]{"java.lang.String"}, new Object[]{parameter});    //      ,      

        //      
        Query query = new Query();
        query.setOrderStatus(1);
        Object object2 = genericService.$invoke("selectList", new String[]{"com.test.Query"}, new Object[]{query});    //      ,    
        System.out.println(object2);

        return object;
    }

    public static void main(String[] args) {
        test2("com.test.OrderService","selectOne","ABC123");
    }
}
注:
1,registryConfig.set Address()メソッドで記入したzookeeperの住所です。
2,汎用インターフェースを呼び出す時には、reference.setGenerac(true)が必要です。
 
GenericService概要
GenericServiceはDuboが提供する汎用インターフェースです。
サービスプロバイダがこのインターフェースを使用すると、Interfaceのコードは省略され、方法とパラメータの声明は省略され、インターフェース名を指定することでzookeeperにアクセスすることができます。この時GenericServiceはゲートウェイになりました。
サービス消費者がこのインターフェースを利用する場合、サービスプロバイダのInterfaceインターフェースクラスに依存せず、具体的なインターフェースタイプのアドレスを指定することによって、消費者を作成し、zookeeperに行って対応するプロバイダを検索し、呼び出しを開始するメリットがある。
GenericServiceインターフェースは一つの方法しかないです。
Object$invoke(String var 1,String[]var 2,Object[]var 3)throws Generic Exception;
最初のパラメータはメソッド名です。
第二のパラメータは、各パラメータのタイプのパスである文字列配列である。
3番目のパラメータはObject配列であり、方法に伝える具体的なパラメータリストである。
$invoke()メソッドの戻り値:単一の非単純要素が返された場合、戻り値タイプは実際にはhashMapであり、戻り値がリストである場合、戻り値タイプは実際にはArayListである。
詳細は以下を参照してください。
DuboのGenericService概要と基本使用
 
本論文は終了します
 
三篇手動で指定されたDuboインターフェースの文章を呼び出します。
手動呼び出し指定Duboインターフェース(一)----Spring注入編
手動起動指定Duboインターフェース(二)----Reference編
手動起動指定Duboインターフェース(三)----GenericService編