Как обрабатывать сценарии повторного подключения клиентского канала Grpc в JavaJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как обрабатывать сценарии повторного подключения клиентского канала Grpc в Java

Сообщение Anonymous »

Я использую GRPC java 1.50 для управления связью Grpc между различными компонентами и использую consul для обнаружения служб.
На стороне клиента я кэширую ManagedChannel в ConcurrentHashMap для каждой службы, поскольку хочу повторно использовать один и тот же канал.Я столкнулся с двумя проблемами:
а) Когда сервер Grpc перезапускается или сервер Grpc перемещается на другой хост, у меня нет возможности узнать, когда канал закрыт и т. д.
При попытке нижеприведенных подходов :

Код: Выделить всё

private final ConcurrentMap channels;

ManagedChannelBuilder managedChannelBuilder = ManagedChannelBuilder
.forTarget(target)
.usePlaintext();
final ManagedChannel channel = managedChannelBuilder
.build();

monitorChannelState(channel, service);

private void monitorChannelState(ManagedChannel channel, String service) {
channel.notifyWhenStateChanged(ConnectivityState.TRANSIENT_FAILURE, () -> {
logger.warn("Channel is in TRANSIENT_FAILURE state for [service={}]. Attempting to reconnect...", service);
close(service);
create(service);
});

channel.notifyWhenStateChanged(ConnectivityState.IDLE, () -> {
logger.info("Channel is in IDLE state for [service={}]. Requesting connection...", service);
channel.getState(true); // Request connection
});
}

void close(final String service) {
if (StringUtils.isNotBlank(service)) {
ManagedChannel removedChannel = channels.remove(service);
if (removedChannel != null) {
logger.info("Closing down Channel [service={}]", service);
removedChannel.shutdownNow();
}
}
}
Сканарий 1:
При мониторинге канала.notifyWhenStateChanged(ConnectivityState.SHUTDOWN) он пытается воссоздать канал для каждого вызова, что не является оптимизированным решением.Сценарий 2:
При мониторинге канала.notifyWhenStateChanged(ConnectivityState.TRANSIENT_FAILURE) он попадает в цикл подключения. Даже при добавлении стратегий экспоненциального повторного подключения это тот же цикл.
Мой вопрос: как воссоздать канал при перезапуске сервера Grpc или перемещении на другой компьютер

Подробнее здесь: https://stackoverflow.com/questions/791 ... os-in-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»