Как правильно настроить подписки Netflix DGS с помощью ConnectableFluxJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как правильно настроить подписки Netflix DGS с помощью ConnectableFlux

Сообщение Anonymous »

Я пытаюсь понять, как правильно настроить издателя для подписок Netflix DGS.
Я нашел два интересных примера:
  • Spring-GraphQL
  • Netflix-DGS
Если модель подписки концептуально это «один подписчик на одно подписное соединение GraphQL, то есть веб-сокеты», если кажется, что нам нужно использовать ConnectableFlux из Netflix для трансляции нескольким подписчикам. Но с другой стороны, Spring-GraphQL использует Sinks.Many для отправки нескольким подписчикам. И я изо всех сил пытаюсь найти документацию о компромиссах между ними.
Кажется, оба управляют обратным давлением, хотя и с немного более настраиваемыми параметрами в Sinks.Many. А ConnectableFlux, кажется, управляет подписчиками более элегантно с помощью refCount....возможно, Sinks.Many тоже делает то же самое.
Я могу легко соединить разрыв между обоими подходами примерно такой:

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

@Component
public class SinkConfig {

private final Sinks.Many sink;
private final Flux reviewFlux;

public SinkConfig() {
Sinks.Many sinks = Sinks.many().multicast().onBackpressureBuffer(Queues.SMALL_BUFFER_SIZE, false);
this.reviewFlux = sinks.asFlux().publish().refCount(1);
this.sink = sinks;
}

//Only subscribe to reviews written by a particular user
Publisher publisher(String input) {
return reviewFlux.filterWhen(x -> Mono.fromCallable(() -> x.getUsername().equals(input)));
}

void emit(Review review) {
sink.emitNext(review, Sinks.EmitFailureHandler.FAIL_FAST);
}
}
Приведенный выше пример кажется слишком сложным по сравнению с примерами Spring и Netflix. И я ищу конфигурацию, которая лучше всего подходит для управления тысячами одновременных подписок с фильтрацией по именам пользователей.
Буду очень признателен за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/790 ... ctableflux
Ответить

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

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

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

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

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