RMI方式でRPCリモートコールを実現
3476 ワード
RPC:
RPCとは,以前に我々自身がメソッドをローカルで宣言して呼び出し,メソッド宣言を他のサーバで行い,リモート呼び出しメソッドの実行,メソッドの実行をリモートサーバで行う.ここで、リモートメソッドを呼び出すのはサービス消費者と呼ばれ、リモートメソッドが実行するサーバと呼ばれるプロバイダを提供する.
RMI方式:は、サービス消費開始要求をサーバプロバイダに実現する、サービスプロバイダは、メソッドを呼び出して機能処理 を完了する.後、処理結果はサーバ消費者に応答する. 準拠プロトコル:RMIプロトコル の特徴:RMI方式はJavaが持参した方式である. 使用:参照ソース まとめ: RMI実装RPCは、動的エージェント方式に基づいて実装される.(JDKダイナミックエージェント) リアルオブジェクトは、サービスプロバイダ にある.エージェントは、サービス消費者に存在する. であり、エージェントオブジェクト内のエージェントメソッドは、リモートコールリアルメソッドを実現する.
注意: RMIを使用する場合、リモートアクセスのインタフェースに基づいて、サービス消費者サービスプロバイダに宣言する必要があります. Mavenツールを使用して、異なるプロジェクトで使用するクラスリソースを個別にパッケージ化する必要があります.
コード#コード#
1.サービスインタフェースは単独でmavenプロジェクトとする
2.サービス提供者
サービス実装クラス
サービスの開始
3.サービス消費者
RPCとは,以前に我々自身がメソッドをローカルで宣言して呼び出し,メソッド宣言を他のサーバで行い,リモート呼び出しメソッドの実行,メソッドの実行をリモートサーバで行う.ここで、リモートメソッドを呼び出すのはサービス消費者と呼ばれ、リモートメソッドが実行するサーバと呼ばれるプロバイダを提供する.
RMI方式:
コード#コード#
1.サービスインタフェースは単独でmavenプロジェクトとする
package com.bjsxt.service;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
* Remote 。
*
* @author Administrator
*
*/
public interface UserService extends Remote{
/**
* ,
* @param name
* @return
* @throws RemoteException
*/
public String sayHello(String name) throws RemoteException;
}
2.サービス提供者
サービス実装クラス
package com.bjsxt.service.impl;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import com.bjsxt.service.UserService;
public class UserServiceImpl extends UnicastRemoteObject implements UserService{
public UserServiceImpl() throws RemoteException {
super();
}
@Override
public String sayHello(String name) throws RemoteException {
return "Hello"+name;
}
}
サービスの開始
package com.bjsxt.main;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
import com.bjsxt.service.UserService;
import com.bjsxt.service.impl.UserServiceImpl;
public class RmiProviderApp {
public static void main(String[] args) {
/****
* jvm,
*/
try {
//
LocateRegistry.createRegistry(8888);
// URL
String name="rmi://localhost:8888/rmi";
// UserServiceImpl ,
UserService userService = new UserServiceImpl();
// , URL
Naming.bind(name, userService);
System.out.println("=========== rmi ============");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3.サービス消費者
package com.bjsxt.main;
import java.rmi.Naming;
import com.bjsxt.service.UserService;
public class RmiConsumerApp {
public static void main(String[] args) {
/***
* jvm,
*/
try {
// URL
String name="rmi://localhost:8888/rmi";
// url
UserService userService=(UserService) Naming.lookup(name);
System.out.println("---"+userService.getClass());
//
String result = userService.sayHello(" ");
System.out.println("result="+result);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}