Как реактивное программирование может реагировать на изменения базы данных?
Я новичок в теме реактивного программирования и поэтому у меня есть несколько вопросов.
Я занимаюсь разработкой небольшого программного обеспечения. Я хотел бы воспользоваться возможностью, чтобы лучше узнать реактивное программирование.
Поэтому я посмотрел на проект-реактор Spring. Я также использую R2DBC для реактивного доступа к базе данных.
Я хотел бы знать, есть ли способ, которым база данных реагирует на изменения.
Или скорее: если пользователь сохраняет запись в базе данных, то серверы (например, RestController) должны быть уведомлены.
Как я мог сделать это?
Соответствующие контроллеры, конфигурации, сущности и т. Д. Я уже реализовал.
Извините за орфографические ошибки.
Дополнение: Обновления веб-интерфейса затем выполняются событиями, отправленными сервером.
2 ответа
В основном то, что упомянул Ник Цитлакидис. Позвольте мне добавить пару вещей здесь.
Типичным шаблоном запросов к базе данных является запрос ряда записей. Базы данных отвечают своими результатами и указывают, что запрос завершен после того, как сервер отправил все записи в ваше приложение. Если новые записи поступают в то время, когда запрос активен или после того, как запрос завершен, вы не увидите эти изменения сразу из-за изоляции, а в случае, если запрос завершен, у вас больше не будет ссылки на запрос.
Запрашиваемая вами функция - это управляемое событиями потребление данных. Базы данных называют эту функцию непрерывными запросами. Некоторые хранилища (например, MongoDB с курсорами Tailable или Postgres Logical Decoding) оснащены функциями, позволяющими держать курсор / запрос открытым, и ваш клиент может получать постоянные обновления.
Kafka и JMS также следуют идее отправки (сообщений), которые обычно используются слушателями или даже через реактивный поток.
Так что все сводится к технологии, которую вы используете.
Насколько я понимаю, реактор не может решить эту проблему самостоятельно. Если вы хотите, чтобы ваше приложение отреагировало (отреагировало) на какое-то изменение базы данных, вам нужно определить, кто вносит это изменение, и реализовать там какую-то интеграцию.
Пример, если у вас есть Service1
обновление базы данных и Service2
должен ответить тогда Service1
можно либо позвонить Service2
или вы можете отправить событие из Service1
и слушать событие из Service2
,
Первый подход проще и проще в реализации, но у него есть недостаток, который связывает две службы. Второе сложнее реализовать, но сервисы не связаны.
Reactor может помочь вам в обоих случаях: для событий реактор может дать вам возможность прослушать события. Например, используя модуль реактор-кролик или реактор-кафка. Для сервисных звонков реактор может помочь вам, если вы используете Spring Webflux.
Возможно, вы можете рассказать нам больше о своем деле, чтобы мы могли предложить более конкретное решение?