Является ли реактивное расширение подходящим для автобуса?
Я использовал Rx немного для создания шины событий (думаю, CQRS/ES) в одном приложении, и, похоже, он отлично работает. Тем не менее, после просмотра нескольких различных фреймворков Event Sourcing, я не видел Rx, который использовался один раз. Это похоже на действительно хорошую посадку, в отличие от диспетчера на основе отражения/контейнера, но, возможно, я чего-то не хватает. Я бы предпочел не тратить кучу времени на то, что у вас есть шоу-шоу в течение 3 месяцев. Есть ли причина, по которой Rx не подходит?
Спасибо,
Erick
Ответы
Ответ 1
Rx очень определенно является фантастической основой для событийного и реактивного программирования в целом. Фактически, я бы сказал, что ограничение интерфейса IObservable
для диспетчеризации на самом деле лучше, чем что-либо более тяжелое. Тогда вы, естественно, используете стиль обмена сообщениями, который хорошо подходит для масштабирования и неизменности. Разделение проблем становится естественным.
Область, в которой вы можете бороться в будущем, - это то, что ваши системы выходят за рамки одного приложения. Rx очень прост в одном приложении, но требует определенных усилий, как только вам нужно добавить "инфраструктуру" между вашими приложениями. Не то чтобы это не сработало! Это происходит, когда вы добавляете разные источники для своих экземпляров Subject
и IObservable
- это просто нужно сделать вручную в некоторых случаях, тогда как другие рамки "event sourcing" (что вы имели в виду?) Могут иметь больший диапазон внешних "адаптеров".
О Rx используется таким образом в целом (т.е. в Интернете). Во-первых, помните, что есть много других платформ, кроме .NET, и Rx не будет отображаться ни в одном из них. Реактивный стиль может под другим именем.
Во-вторых, вы - - not - . В том числе кто-то которому так нравится Rx для CQRS, они хотят сделать это в Scala и JVM!
Ответ 2
Здесь приведен пример шины сообщений в Rx
Ответ 3
Если вы хотите использовать RX между двумя процессами, проверьте:
- NetMQ.ReactiveExtensions. Это оболочка RX, которая использует ZeroMQ для передачи сообщений по сети.
- Obvs.
- Любая обертка RX над Kafka.
- Любая RX-оболочка для любой системы обмена сообщениями между процессами, например, RabbitMQ.
Все эти библиотеки делают то же самое: они реализуют интерфейсы IObservable и IObserver от Microsoft.
Ответ 4
Если вы хотите использовать внутреннюю память, поддерживающую Rx в .NET, вы должны проверить MemBus.
Альтернативой является использование MessageBus
из ReactiveUI. Но поскольку он не поставляется в специальной библиотеке, вам нужно будет установить всю библиотеку ReactiveUI, что имеет смысл только в приложении WPF, а не в старых проектах WinForms.