ホームページ > バックエンド開発 > Golang > 単一の接続を使用して複数の gRPC サービスにアクセスするにはどうすればよいですか?

単一の接続を使用して複数の gRPC サービスにアクセスするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-02 09:42:31
オリジナル
397 人が閲覧しました

How can I access multiple gRPC services using a single connection?

単一接続を介した複数の gRPC サービスへのアクセス

概要:

gRPC では、クライアントが で公開されている複数のサービスと通信できるようになります。単一のサーバー。ただし、各サービスには専用のクライアント接続が必要であると想定されることがよくあります。この記事では、単一の接続を利用して複数の gRPC サービスにアクセスする方法について説明します。

単一ソケットのダイヤル:

個別のサービス インターフェイスがあるにもかかわらず、個別のソケットを確立する必要はありません。各サービスの接続。代わりに、単一の grpc.ClientConn を作成できます。この接続は、New*Client() 関数を使用してインスタンス化されたすべてのサービス クライアントに渡すことができます。接続を共有することで、これらのクライアントは同じ基盤となるトランスポートおよび多重化メカニズムを利用します。

<code class="go">cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure())
if err != nil {
    log.Fatal(err)
}</code>
ログイン後にコピー

インターフェイスの使用:

ただし、サービスごとに個別の構造体を作成するとクライアントが簡素化されます。相互作用により、コードの重複が促進されます。これを軽減するために、ServiceClient などのインターフェイスをすべてのサービス クライアントで定義して実装できます。これにより、共通のプロパティとメソッドの共有が可能になり、コードの混乱が軽減されます。

<code class="go">type ServiceClient interface {
    // Common methods and properties
}

type SubscriberClient struct {
    pb.SubscriberServiceClient
}

type DropperClient struct {
    pb.DropperServiceClient
}</code>
ログイン後にコピー

ライブラリの依存関係の排除:

cmux のようなライブラリは接続を共有するためのソリューションを提供しますが、それは外部依存なしでこれを達成することは可能です。 grpc.ClientConn は、基礎となるトランスポートへの直接アクセスを提供し、複数のサービス クライアントの作成を可能にします。

<code class="go">func NewServiceClient(conn *grpc.ClientConn, service interface{}) interface{} {
    switch service {
    case pb.SubscriberServiceServer:
        return pb.NewSubscriberServiceClient(conn)
    case pb.DropperServiceServer:
        return pb.NewDropperServiceClient(conn)
    }
    panic("Unknown service")
}</code>
ログイン後にコピー

重要なポイント:

  • 単一のサービス クライアントの使用複数のサービスの grpc.ClientConn により、パフォーマンスが最適化され、コーディングが簡素化されます。
  • インターフェイスにより、クライアントの対話が合理化され、コードの重複が削減されます。
  • 外部ライブラリの依存関係を排除することで、カスタマイズされた柔軟なソリューションが可能になります。

以上が単一の接続を使用して複数の gRPC サービスにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート