0
GRPC-JavaではCallCredentialsを現在使用していません。特定の呼び出しのためにヘッダーの複数のフィールドを渡す必要があります。私は以下のようにヘッダーに値を設定し、非同期スタブ/チャネルを使用しているときに呼び出されるインターセプタを追加しました。grpc javaクライアント要求のヘッダーを設定しています
移入ヘッダ
public Metadata generateHeader() {
Metadata.Key<String> jwtKey = Metadata.Key.of("jwt", Metadata.ASCII_STRING_MARSHALLER);
headers.put(jwtKey, jwt);
Metadata.Key<String> testKey = Metadata.Key.of("testID", Metadata.ASCII_STRING_MARSHALLER);
headers.put(testKey, testID);
return headers;
}
私はクライアントインターセプタに渡されたインスタンス変数としてヘッダフィールドにアクセスしています。私はヘッダーは、それがnullになる時点(私は明らかにヘッダーがサーバー側に移入されて表示されません)になる時点で開始呼び出しになるまで、意図した値が含まれていることがわかります。これを修正するためのアイデア(またはCallCredentialsを使用する必要があります)。 GRPC-Javaのドキュメントには多くの作業が必要です。
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
MethodDescriptor<ReqT, RespT> method,
CallOptions callOptions,
Channel next) {
log.info("HEADER INTERCEPTOR{}", headers.get(Metadata.Key.of("jwt", Metadata.ASCII_STRING_MARSHALLER)));
ClientCall<ReqT, RespT> call = next.newCall(method, callOptions);
return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(call) {
@Override
public void start(ClientCall.Listener<RespT> responseListener, Metadata headers) {
log.info("HEADER START {}", headers.keys());
super.start(responseListener, headers);
}
};
}
あなたは私の修正を共有することができますか? – rana
その答えです。 –
このコードはどこにありますか?あなたはあなたの答えをはっきりと更新できますか? === キャッシュされたメタデータ= getHeaders()。get(Metadata.Key.of( "testID"、Metadata.ASCII_STRING_MARSHALLER))); headers.merge(キャッシュ済み)。 – rana