Как реактивное программирование может реагировать на изменения базы данных?

Я новичок в теме реактивного программирования и поэтому у меня есть несколько вопросов.

Я занимаюсь разработкой небольшого программного обеспечения. Я хотел бы воспользоваться возможностью, чтобы лучше узнать реактивное программирование.

Поэтому я посмотрел на проект-реактор Spring. Я также использую R2DBC для реактивного доступа к базе данных.

Я хотел бы знать, есть ли способ, которым база данных реагирует на изменения.

Или скорее: если пользователь сохраняет запись в базе данных, то серверы (например, RestController) должны быть уведомлены.

Как я мог сделать это?

Соответствующие контроллеры, конфигурации, сущности и т. Д. Я уже реализовал.

Извините за орфографические ошибки.

Дополнение: Обновления веб-интерфейса затем выполняются событиями, отправленными сервером.

2 ответа

В основном то, что упомянул Ник Цитлакидис. Позвольте мне добавить пару вещей здесь.

Типичным шаблоном запросов к базе данных является запрос ряда записей. Базы данных отвечают своими результатами и указывают, что запрос завершен после того, как сервер отправил все записи в ваше приложение. Если новые записи поступают в то время, когда запрос активен или после того, как запрос завершен, вы не увидите эти изменения сразу из-за изоляции, а в случае, если запрос завершен, у вас больше не будет ссылки на запрос.

Запрашиваемая вами функция - это управляемое событиями потребление данных. Базы данных называют эту функцию непрерывными запросами. Некоторые хранилища (например, MongoDB с курсорами Tailable или Postgres Logical Decoding) оснащены функциями, позволяющими держать курсор / запрос открытым, и ваш клиент может получать постоянные обновления.

Kafka и JMS также следуют идее отправки (сообщений), которые обычно используются слушателями или даже через реактивный поток.

Так что все сводится к технологии, которую вы используете.

Насколько я понимаю, реактор не может решить эту проблему самостоятельно. Если вы хотите, чтобы ваше приложение отреагировало (отреагировало) на какое-то изменение базы данных, вам нужно определить, кто вносит это изменение, и реализовать там какую-то интеграцию.

Пример, если у вас есть Service1 обновление базы данных и Service2 должен ответить тогда Service1 можно либо позвонить Service2или вы можете отправить событие из Service1 и слушать событие из Service2,

Первый подход проще и проще в реализации, но у него есть недостаток, который связывает две службы. Второе сложнее реализовать, но сервисы не связаны.

Reactor может помочь вам в обоих случаях: для событий реактор может дать вам возможность прослушать события. Например, используя модуль реактор-кролик или реактор-кафка. Для сервисных звонков реактор может помочь вам, если вы используете Spring Webflux.

Возможно, вы можете рассказать нам больше о своем деле, чтобы мы могли предложить более конкретное решение?

Другие вопросы по тегам