#java #connection #grpc #grpc-java
#java #подключение #grpc #grpc-java
Вопрос:
Я внедрил GRPC-клиент с Java.
String host:"192.893.12.11";
int port:9090;
ManagedChannel managedChannel = ManagedChannelBuilder.forAddress(host, port).usePlaintext().build();
Я хочу получать информацию о потере соединения grpc. Как уведомить клиента, если GRPC-соединение было потеряно?
Комментарии:
1. Просто взглянул на JavaDocs для
ManagedChannel
, кажется, есть метод ManagedChannel.notifyWhenStateChanged — это делает то, что вам нужно?2. Как использовать этот метод? Есть ли какой-нибудь пример?
3.
notifyWhenStateChanged
может немного помочь. Его использование должно быть довольно простым, как описано в Javadoc . ПримечаниеnotifyWhenStateChanged
может обнаруживать только изменения состояния канала. Однако состояние канала не обязательно отражает срок службы TCP-соединения. Сокет TCP может оставаться открытым (или закрываться операционной системой автоматически), даже если сетевое соединение было прервано в середине. Таким образом, gRPC может знать только о том, что соединение разорвано, при сбое записи в сокет.4. Использование времени жизни RPC является более точным. Вы можете использовать потоковый RPC, если это поможет. RPC могут работать до тех пор, пока они подключены к TCP-соединению.
Ответ №1:
Вы можете использовать notifyWhenStateChanged
метод ManagedChannel, чтобы получать уведомления при изменении состояния канала, например, хотите получать уведомления при завершении работы сервера, вы можете попробовать приведенный ниже код:
// create a ManagedChannel
ManagedChannel channel = ManagedChannelBuilder.forTarget(target)
.usePlaintext()
.build();
// add callback method
channel.notifyWhenStateChanged(ConnectivityState.SHUTDOWN, () -> System.out.println("server shutdown"));
Комментарии:
1. Это неправильно, потому что первый параметр — это текущее состояние, а не целевое состояние.