2016-11-16 11 views
3

私は同じサーバプロセスからホストされる独立した番号のgRPCサービスを指定しています。各サービスは独自のprotobufファイルで定義されています。これらは、次にgRPCツールを実行して、私のターゲット言語(私の場合はc#)を与え、そこで私のサーバーとクライアントを実装することができます。サービス間でgRPCプロト定義を共有するにはどうすればいいですか

これらの別々のAPIの各gRPCWellKnownTypesで利用可能であるように思われた(共通の要素の数、エラー応答列挙のようなもの、メッセージタイプを使用しています。しかし、私は私が含まどのように見ることができませんそれで私は自分自身を定義しました)。

現時点では、私はそれぞれのprotoで独自の名前空間に重複する列挙型とクラスを構築します。私は共通の原始ファイルに定義を共有し、それを含めることができます。共通の名前空間にこれらのうちのただ1つのコードジェネレーターで終わる方法はわかりません。これは動作しますが、それを1つのセットに保つことはうまくいきません。サービス間でエラーを集計するようなことを行うと、変換や同等の問題が発生する可能性があります。

は、私は、このような名前空間は、これが可能であることを示唆しているWellKnownTypesとして、物事の私の読書として何かをしないのですが、前に述べたように、私はどちらかのプロトでそれを参照する方法を見ていないと仮定します。

とても光っているようです。gRPC私の検索はあまり盛んではないので、私はこれほど新しいポインタです。

+0

https://developers.google.com/protocol-buffers/docs/proto#otherがあなたのためになる可能性があります。 – weismat

答えて

4

プロトコルバッファは、異なるpackage識別子を使用してこの問題を解決します。各メッセージは、C#名前空間から独立した別のプロトコルバッファ固有のパッケージに配置されます。たとえば、次のように

// common.proto 
syntax "proto3"; 
package my.api.common; 

option csharp_namespace = "My.Api.Common"; 

message Shared { 
    // ... 
} 

そしてサービスの特定のファイルに:

// service1.proto 
syntax "proto3"; 
package my.api.service1; 

import "common.proto"; 

option csharp_namespace = "My.Api.Service1"; 

message Special { 
    my.api.common.Shared shared = 1; 
} 

あなたは、そうでない場合が同期して得ることができ、一般的なプロトのコピーは1つだけ存在していることを確認する必要があります。共通のメッセージをcommon.protoファイルに入れ、特定の他のプロトファイルから参照することができます。

+0

私はsoooooすみません、このことを確認するまでにはずっと時間がかかりました。別のタスクにドラッグされました。 – Wizbit

関連する問題