Ich verwende CallCredentials nicht ab sofort mit GRPC-Java. Ich muss in den Überschriften für bestimmte Anrufe mehrere Felder übergeben. Ich habe die Header wie unten angegeben aufgefüllt und einen Interceptor hinzugefügt, der aufgerufen wird, während ein asynchroner Stub/Kanal verwendet wird.Popup-Header für Grpc Java-Client-Anfrage
bevölKopf
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;
}
ich die Header-Feld als Instanzvariable am Zugriff auf den Client-Abfangjäger übergeben. Ich kann sehen, dass die Header den beabsichtigten Wert enthält, bis es in den Startaufruf gelangt, zu welchem Zeitpunkt es Null wird (ich sehe natürlich die Header nicht auf der Serverseite aufgefüllt). Irgendwelche Ideen, um das zu beheben (oder sollte ich CallCredentials verwenden). Dokumentation für GRPC-Java benötigt viel Arbeit.
@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);
}
};
}
können Sie mir das Update teilen? – rana
ist es in der Antwort oben. –
Wohin geht dieser Code? Können Sie Ihre Antwort bitte klar auf den neuesten Stand bringen? === Metadaten zwischengespeichert = getHeaders(). Get (Metadata.Key.of ("testID", Metadata.ASCII_STRING_MARSHALLER))); headers.merge (zwischengespeichert); – rana