java #spring #reactive
#java #spring #реактивный
Вопрос:
Я быстро начал использовать реактивное мышление вместе с java и Spring.
Возможно ли создать сценарий, в котором у вас есть динамическое количество производителей? Я разрабатываю продукт, который прослушивает определенное оборудование для событий, и было бы здорово, если бы я мог добавить (и, возможно, удалить) динамическое прослушивание устройств A, B … Z без завершения потока.
Я представляю себе что-то вроде:
@GetMapping("/")
public Flux<HardwareEvent> void test() {
return Flux.merge(
listenHardware(A),
listenHardware(B)
);
}
Flux<HardwareEvent> listenHardware(HardwareId id); // produced indefinite stream of events
Где вы каким-то образом могли бы динамически вводить новых производителей в слияние, не останавливая поток.
Возможно ли это?
Если бы кто-нибудь мог указать мне (или опубликовать) пример, это было бы потрясающе. С уважением.
Ответ №1:
Возможно, вам понадобится некоторый код склеивания в середине, но это выглядит как хороший вариант использования для субъектов
Вместо того, чтобы иметь «обычный» Observable
, у вас будет Subject
то, что вы видите как наблюдаемое. Хорошая особенность Subject
s в том, что вы можете создавать новые значения по требованию, чтобы вы могли сделать что-то вроде
Subject<Value> s = ...;
Observable<Value> getObservable() {
return s;
}
void addSource(Observable<Value> obs) {
obs.subscribe(v -> s.emit(s))
}
Обратите внимание, что это псевдокод и, вероятно, не будет компилироваться как есть
Взгляните на Subject
документы, чтобы узнать, какой из них лучше соответствует вашим потребностям
Комментарии:
1. Интересно, однако я не уверен, что Springs flavor of reactive поддерживает темы, или, может быть, он просто назвал что-то другое (тема немного сложна для Google ;))
2. Вот почему я включил ссылки на документацию. Spring webflux также поддерживает RxJava
3. о — ок, извините, я этого не знал. Как я понял, я реактивный новичок. В любом случае спасибо за ваше время 🙂