zoukankan      html  css  js  c++  java
  • RPC

    HttpClient特别老,可以采用RPC替换。

    Hadoop

    Dubbo部署:服务端创建、实现接口

                       客户端调用接口

     Hadoop使用到的底层的RPC

    1.RPC(Remote Procedure Call Protocol)--远程过程调用协议

    RPC 采用客户机/服务器模式

    2.客户端调用的服务端的接口服务。

      客户端和服务端有共同的服务接口。

    服务接口
    interface  SomeService{
          public long versionID=Long.MAX_VALUE:
           
          public String heartBeat(String name);
    }
    服务器接口实现类
    class SomeServiceImpl implements SomeService{
        @Override
         public String heartBeat(String name){
              System.out.println("接收到客户端"+name+"的心跳。。。");
              return "心跳成功";
         }
    }        

    服务端的实现:

      1>.服务端对接口进行实现。

      2>.服务端还需要接收客户端的请求,启动一个服务对客户端 端口的监听。

        

    MyServer.java
    
    import java.net.InetSocketAddress;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.ipc.RPC;
    main 方法中: Builder builder
    =new RPC.Builder(new Configuration()); builder.setBindAddress("localhost"); builder.setPort(5555); builder.setProtocol(SomeService.class);//自己定义的服务器和客户端共同的服务接口 builder.setInstance(new SomeServiceImpl());//服务器端对服务接口的实现类 Server server=builder.build(); server.start();

    客户端的实现:

    1>.要访问这个协议

    MyClient.java
    
    main方法中
    
    SomeService someService=RPC.getProxy(SomeService.class,Long.MAX_VALUE,
    new InetSocketAddress("localhost",5555),new Cofiguration()); //其中Long.MAX_VALUE,对应SomeService服务接口中的版本号,保持一致。 String ret=someService.heartBeat("wilson"); //客户端通过方法带参数发送给服务端,此时服务端通过builder.build()反射调用服务器接口方法,返回结果给客户端 System.out.println(ret);

     

     2018年7月11日15:55:33

    对应模块:rpc-sample-app

    创建代理类对象,返回接口兑现

    ProxyBoss.java //对接口方法进行代理
    
    package  proxyclass;
    
    import java.lang.reflect.InvocationHandler;
    
    
    public static <T>  T getProxy(final int discountCoupon,
        final Class<?> interfaceClass ,
        final Class<?> imlementsClass) throws Exception{
      
      return (T)     
       Proxy.newProxyInstance(
       interfaceClass.getClassLoader(),
       new Class[]{ interfaceClass},
       new InvocationHandler(){
            public Object invoke(Object proxy,Method method, Object[] args) throws Throwable{
        //调用原始对象以后返回的值
        Integer returnValue=(Integer) method.invoke(implementsClass.newInstance(),args);
      return  returnValue-discountCoupon;
    }
    } )
      
    }        

    对应 rpc-sample-server模块

    MyReflect.java
    
    /**
    *获取私有的成员函数
    */
    public void getPrivateMethod() throws Exception{
        Object obj=personClass.newInstance();//获取空参的构造函数
        Method method=personClass.getDeclaredMethod("getSomeThing");  
     method.setAccessible(true);
    Object value=method.invoke(obj);
    System.out.println(value);
    
    }

  • 相关阅读:
    [UWP] 为WinRT组件创建Nuget包
    再见北京,深圳你好
    [UWP] 用 AudioGraph 来增强 UWP 的音频处理能力——AudioFrameInputNode
    [UWP] 用 AudioGraph 来增强 UWP 的音频处理能力
    UWP 多语言的三个概念
    利用 Win32 启动和检测 UWP App 的方法
    反向代理教务系统
    [UWP] Custom Capability的使用
    [UWP]针对UWP程序多语言支持的总结,含RTL
    Xamarin自定义布局系列——支持无限滚动的自动轮播视图CarouselView
  • 原文地址:https://www.cnblogs.com/liyanli-mu640065/p/9232125.html
Copyright © 2011-2022 走看看