検索
ホームページJava&#&チュートリアルRPC フレームワークとは何ですか?

RPC フレームワークとは何ですか?

Oct 29, 2020 pm 03:04 PM
RPC フレームワーク

rpc フレームワークには、1. RMI、リモート メソッド呼び出し、2. ヘシアン、HTTP ベースのリモート メソッド呼び出し、3. Dubbo、タオバオのオープン ソース TCP ベース RPC フレームワークが含まれます。

RPC フレームワークとは何ですか?

rpc フレームワークには次のものがあります。

RPC はリモート プロシージャの略です。 call は大規模な分散アプリケーションで広く使用されており、その役割はシステムの垂直分割を促進し、システムの拡張を容易にすることです。 Java には多くの RPC フレームワークがあり、それぞれに独自の特徴があり、広く使用されているものには RMI、Hessian、Dubbo などが含まれます。 RPC のもう 1 つの特徴は、言語を越えて実行できることです。この記事では、例として JAVA 言語の RPC のみを取り上げます。

#RMI を例とした、RPC の論理関係図があります。


#他のフレームワーク構造も同様ですが、オブジェクトのシリアル化方法、オブジェクトを送信するための通信プロトコル、登録センターの管理とフェイルオーバー設計 (Zookeeper を使用) が異なります。

クライアントとサーバーは異なる JVM で実行できます。クライアントはインターフェースを導入するだけです。インターフェースの実装と実行時に必要なデータはすべてサーバー側で行われます。RPC主にテクノロジーに依存しており、シリアル化、逆シリアル化、および送信プロトコルであり、JAVA では、シリアル化されたデータのシリアル化、逆シリアル化、送信に相当します。 RMI のシリアル化と逆シリアル化は JAVA にネイティブです。ヘシアンのシリアル化と逆シリアル化はプライベートであり、送信プロトコルは HTTP です。Dubbo のシリアル化はさまざまなオプションから選択できます。一般的にはヘシアンのシリアル化プロトコルが使用されます。送信は TCP プロトコルで、高性能 NIO フレームワーク Netty。また、Google の ProBuffer、JBoss Marshalling、Apache Thrift などのシリアル化についても多少の知識はあります。以前、ProBuffer

# # を紹介するブログ投稿を書きました。 1. RMI (Remote Method Invocation)

JAVA 独自のリモート メソッド呼び出しツールですが、特定の制限があります。結局のところ、これは JAVA 言語のオリジナルの設計です。 、多くのフレームワークの原則は RMI に基づいていました。RMI の使用方法は次のとおりです:

#外部インターフェイス

<span>public interface IService extends Remote {

    public String queryName(String no) throws RemoteException;

}</span>
サービス実装

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

// 服务实现
public class ServiceImpl extends UnicastRemoteObject implements IService {

    /**
     */
    private static final long serialVersionUID = 682805210518738166L;

    /**
     * @throws RemoteException
     */
    protected ServiceImpl() throws RemoteException {
        super();
    }

    /* (non-Javadoc)
     *
     */
    @Override
    public String queryName(String no) throws RemoteException {
        // 方法的具体实现
        System.out.println("hello" + no);
        return String.valueOf(System.currentTimeMillis());
    }
    
}
#RMI クライアント

import java.rmi.AccessException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

// RMI客户端
public class Client {

    public static void main(String[] args) {
        // 注册管理器
        Registry registry = null;
        try {
            // 获取服务注册管理器
            registry = LocateRegistry.getRegistry("127.0.0.1",8088);
            // 列出所有注册的服务
            String[] list = registry.list();
            for(String s : list){
                System.out.println(s);
            }
        } catch (RemoteException e) {
            
        }
        try {
            // 根据命名获取服务
            IService server = (IService) registry.lookup("vince");
            // 调用远程方法
            String result = server.queryName("ha ha ha ha");
            // 输出调用结果
            System.out.println("result from remote : " + result);
        } catch (AccessException e) {
            
        } catch (RemoteException e) {
            
        } catch (NotBoundException e) {
            
        }
    }
}

#RMI サーバー

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

// RMI服务端
public class Server {

    public static void main(String[] args) {
        // 注册管理器
        Registry registry = null;
        try {
            // 创建一个服务注册管理器
            registry = LocateRegistry.createRegistry(8088);

        } catch (RemoteException e) {
            
        }
        try {
            // 创建一个服务
            ServiceImpl server = new ServiceImpl();
            // 将服务绑定命名
            registry.rebind("vince", server);
            
            System.out.println("bind server");
        } catch (RemoteException e) {
            
        }
    }
}

サービスの登録管理 サーバーはServerに記述されており、もちろん別のサービスとして取り出すことも可能ですが、他のフレームワークではZookeeperが登録管理の役割を果たすことがよくあります。

2. ヘッセ行列 (HTTP ベースのリモート メソッド呼び出し)

HTTP プロトコル送信に基づいて、そのパフォーマンスは次のようになります。まだ良好です 完璧ではありません。ロード バランシングとフェイルオーバーはアプリケーションのロード バランサに依存します。ヘシアンの使用は RMI に似ています。違いは、レジストリの役割が軽視されていることです。表示されたアドレスを通じて呼び出され、HessianProxyFactory を使用して設定されたアドレスに基づくプロキシ オブジェクト さらに、Hessian Jar パッケージも導入します。


#3. Dubbo (淘宝網のオープンソース TCP ベースの RPC フレームワーク)

#Netty に基づく高性能 RPC フレームワークは、Alibaba によってオープンソース化されており、全体的な原則は次のとおりです。 Dubbo を理解する前に、まず Zookeeper について深く理解する必要があります。一度 Zookeeper を理解すれば、Dubbo に秘密はなくなります。

Dubbo の詳細な説明は、タオバオ オープンソースに非常に詳しく記載されています。Dubbo は仕事で多くの制作プロジェクトで使用されており、その過程で注意が必要な点も多く発見されています。多数の構成や不適切な設定は煩わしいので、既存のオープンソース Dubbo をベースにカスタマイズして最適化するのが最善です。


関連する無料学習の推奨事項:

Java 基本チュートリアル

以上がRPC フレームワークとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター