Как реактивное программирование может реагировать на изменения базы данных? - PullRequest
0 голосов
/ 01 апреля 2019

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

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

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

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

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

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

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

Приносим извинения за орфографические ошибки.

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

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

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

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

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

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

Так что все сводится к используемой вами технологии.

1 голос
/ 02 апреля 2019

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

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

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

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

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

...