日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数据笔记(六)——HDFS的底层原理:JAVA动态代理和RPC

發布時間:2025/6/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据笔记(六)——HDFS的底层原理:JAVA动态代理和RPC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

一、Java的動態代理對象

?

實現代碼如下:

  1.接口類MyService

package hdfs.proxy;public interface MyService {public void method1();public void method2(); }

  2.接口實現類MyServiceImpl

package hdfs.proxy;public class MyServiceImpl implements MyService {@Overridepublic void method1() {System.out.println("************ method1 ***************");}@Overridepublic void method2() {System.out.println("************ method2 ***************");}}

  3.測試類TestMain

package hdfs.proxy;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class TestMain {public static void main(String[] args) {//創建真正的對象MyService obj = new MyServiceImpl();//obj.method1(); ---> 都是直接調用真正對象//obj.method2(); ---> 都是直接調用真正對象/** Object Proxy.newProxyInstance(ClassLoader loader, 類加載器,代理對象跟真正對象是同一個類加載器Class<?>[] interfaces, 真正對象實現的接口InvocationHandler h) 如何處理客戶端的調用返回一個代理對象 *///生成obj的代理對象,并且重新method2的邏輯MyService proxy = (MyService) Proxy.newProxyInstance(TestMain.class.getClassLoader(), obj.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 如何處理客戶端的調用if(method.getName().equals("method2")){//客戶端調用了method2System.out.println("in proxy method2");return null;}else{//其他方法不感興趣return method.invoke(obj, args);}}});//通過代理對象進行調用 proxy.method1();proxy.method2();}}

console:

二、RPC:遠程過程調用

?1.服務端:發布一個接口(MyBusiness)到RPC Server上

    實現類:MyBusinessImpl

    如果要把程序發布到Hadoop的RPC Server上,必須實現一個接口VersionedProtocol

?2.客戶端:調用服務器端的功能

    得到一個簽名必須與服務器發布的簽名的一樣

? ? ? ? ? ? ? 得到服務器端的對象(代理對象)

?實現代碼如下: 

?

 3.MyBusiness

package demo.proxy.rpc.server;import org.apache.hadoop.ipc.VersionedProtocol;public interface MyBusiness extends VersionedProtocol{//指定一個版本號,使用這個版本號來創建簽名public static long versionID = 1l;//定義自己的業務方法public String sayHello(String name); }

  4.MyBusinessImpl

package demo.proxy.rpc.server;import java.io.IOException;import org.apache.hadoop.ipc.ProtocolSignature;public class MyBusinessImpl implements MyBusiness{@Overridepublic ProtocolSignature getProtocolSignature(String arg0, long arg1, int arg2) throws IOException {//使用versionID創建簽名return new ProtocolSignature(versionID, null);}@Overridepublic long getProtocolVersion(String arg0, long arg1) throws IOException {// 返回IDreturn versionID;}@Overridepublic String sayHello(String name) {System.out.println("*****調用Server端的方法******");//業務方法return "Hello" + name;}}

  5.MyRPCServer

package demo.proxy.rpc.server;import java.io.IOException;import org.apache.hadoop.HadoopIllegalArgumentException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC; import org.apache.hadoop.ipc.RPC.Server;public class MyRPCServer {public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {//?創建一個RPC ServerRPC.Builder builder = new RPC.Builder(new Configuration());//指定Server的地址接口builder.setBindAddress("localhost");builder.setPort(7788);//發布程序builder.setProtocol(MyBusiness.class);//定義的接口builder.setInstance(new MyBusinessImpl());//發布的接口的實現//創建RPC ServerServer server = builder.build();server.start();} }

?6.MyRPCClient

package demo.proxy.rpc.client;import java.net.InetSocketAddress;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.ipc.RPC;import demo.proxy.rpc.server.MyBusiness;public class MyRPCClient {public static void main(String[] args) throws Exception {//調用Server的功能MyBusiness proxy = RPC.getProxy(MyBusiness.class,//調用的接口MyBusiness.versionID,//版本的ID,必須跟服務器一致new InetSocketAddress("localhost", 7788), //服務器的地址?new Configuration());//調用服務器端的方法System.out.println(proxy.sayHello("夢里南柯"));}}

?先啟動Server端,再啟動Client端

?

轉載于:https://www.cnblogs.com/lingluo2017/p/8481636.html

總結

以上是生活随笔為你收集整理的大数据笔记(六)——HDFS的底层原理:JAVA动态代理和RPC的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。